LWN.net Logo

A summary of 2.6.17 API changes

The final 2.6.17 kernel release is getting close. Further internal API changes in this cycle are (one hopes) highly unlikely, so the following list should be definitive for this time around.

  • Support for the SPARC "Niagara" architecture.

  • EXPORT_SYMBOL_GPL_FUTURE() has been merged.

  • The safe notifier patch has been merged, creating a new API for all notifier users.

  • The SLAB_NO_REAP slab cache option, which ostensibly caused the slab not to be cleaned up when the system is under memory pressure, has been removed. The kmem_cache_t typedef is also being phased out in favor of struct kmem_cache.

  • The "softmac" 802.11 subsystem has been merged. This code may eventually be phased out, however, in favor of the Devicescape code.

  • There is a new real-time clock subsystem, providing generalized RTC support and a well-defined driver interface.

  • A new utility function has been added:

         int execute_in_process_context(void (*fn)(void *data),
                                        void *data, 
    				    struct execute_work *work);
    

    This function will arrange for fn() to be called in process context (where it can sleep). Depending on when execute_in_process_context() is called, fn() could be invoked immediately or delayed by way of a work queue.

  • The SMP alternatives patch has been merged.

  • A rework of the relayfs API - but the sysfs interface has been left out for now.

  • There is a new tracing mechanism for developers debugging block subsystem code.

  • There is a new internal flag (FMODE_EXEC) used to indicate that a file has been opened for execution.

  • The obsolete MODULE_PARM() macro is gone forevermore.

  • A new function, flush_anon_page(), can be used in conjunction with get_user_pages() to safely perform DMA to anonymous pages in user space.

  • Zero-filled memory can now be allocated from slab caches with kmem_cache_zalloc(). There is also a new slab debugging option to produce a /proc/slab_allocators file with detailed allocation information.

  • There are four new ways of creating mempools:

         mempool_t *mempool_create_page_pool(int min_nr, int order);
         mempool_t *mempool_create_kmalloc_pool(int min_nr, size_t size);
         mempool_t *mempool_create_kzalloc_pool(int min_nr, size_t size);
         mempool_t *mempool_create_slab_pool(int min_nr, 
                                             struct kmem_cache *cache);
    

    The first creates a pool which allocates whole pages (the number of which is determined by order), while the second and third create a pool backed by kmalloc() and kzalloc(), respectively. The fourth is a shorthand form of creating slab-backed pools.

  • The prototype for hrtimer_forward() has changed:

         unsigned long hrtimer_forward(struct hrtimer *timer,
                                       ktime_t now, ktime_t interval);
    

    The new now argument is expected to be the current time. This change allows some calls to be optimized. The data field has also been removed from the hrtimer structure.

  • A whole set of generic bit operations (find first set, count set bits, etc.) has been added, helping to unify this code across architectures and subsystems.

  • The inode f_ops pointer - which refers to the file_operations structure for the open file - has been marked const. Quite a bit of code, which used to change that structure, has been changed to compensate. Similar changes have been made in many filesystems. "The goal is both to increase correctness (harder to accidentally write to shared datastructures) and reducing the false sharing of cachelines with things that get dirty in .data (while .rodata is nicely read only and thus cache clean)."

  • local_t is now a signed type.

  • Attributes in sysfs can be pollable.

  • A class_device can now have attribute groups created at registration time; to take advantage of this capability, store the desired groups in the new groups field.

  • The splice(), vmsplice(), and tee() system calls have been merged. Supporting those calls requires implementing two new file_operations methods. See this article for the final form of the splice_read() and splice_write() functions.

As always, look at the LWN 2.6 kernel API changes page for a list of changes over time.


(Log in to post comments)

Copyright © 2006, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds