The 2.6.19 kernel cycle has brought the usual pile of changes visible to
kernel developers. Here is a quick summary of the most significant API
modifications in 2.6.19.
The prototype for interrupt handler functions has changed. In short, the
regs argument has been removed, since almost nobody used it.
Any interrupt handler which needs the pre-interrupt register state can
use get_irq_regs() to obtain it.
The readv() and writev() methods in the
file_operations structure have been removed in favor of
aio_readv() and aio_writev() (whose prototypes have been
changed). See this
article for more information.
SRCU - a version of read-copy-update which allows read-side blocking -
has been merged. See this
article by Paul McKenney for lots of details.
The CHECKSUM_HW value has long been used in the networking
subsystem to support hardware checksumming. That value has been
replaced with CHECKSUM_PARTIAL (intended for outgoing packets
where the job must be completed by the hardware) and
CHECKSUM_COMPLETE (for incoming packets which have been
completely checksummed by the hardware).
A number of memory management changes have been merged, including tracking of dirty
pages in shared memory mappings, making the DMA32 and HIGHMEM zones
optional, and an architecture-independent mechanism for tracking
memory ranges (and the holes between them).
The pud_page() and pgd_page() macros now return a
struct page pointer, rather than a kernel virtual address.
Code needing the latter should use pud_page_vaddr() or
pgd_page_vaddr() instead.
A number of driver core
changes including experimental parallel device probing and some improvements to
the suspend/resume process.
There is now a notifier chain for out-of-memory situations; the idea
here is to set up functions which might be able to free some memory
when things get very tight.
The semantics of the kmap() API have been changed a bit: on
architectures with complicated memory coherence issues,
kmap() and kunmap() are expected to manage coherency
for the mapped pages, thus eliminating the need to explicitly flush
pages from cache.
PCI Express Advanced Error Reporting is now supported in the PCI
layer.
A number of changes have been made to the inode structure in
an effort to make it smaller.
Much improved suspend and resume support for the USB layer.
A new set of functions has been added to allow USB drivers to quickly
check the direction and transfer mode of an endpoint.
A somewhat reduced version of Wireless Extensions version 21. Most of
the original functionality has been removed with the idea that the
wireless extensions will soon be superseded by something else.
Vast numbers of annotations enabling the sparse utility to
detect big/little endian errors.
The flags field of struct request has been split
into two new fields: cmd_type and cmd_flags. The
former contains a value describing the type of request (filesystem
request, sense, power management, etc.) while the latter has the flags
which modify the way the command works (read/write, barriers, etc.).
The block layer can be disabled entirely at kernel configuration
time; this option can be useful in some embedded situations.
The kernel now has a generic boolean type, called bool; it
replaces a number of homebrewed boolean types found in various parts
of the kernel.
There is a new function for allocating a copy of a block of memory: