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.
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),
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
- 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
- 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
- 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
- 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
- local_t is now a signed type.
- Attributes in sysfs can be
- 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()
As always, look at the LWN 2.6 kernel API changes page
for a list of changes over time.
to post comments)