* A new PHY abstraction layer has been added for network drivers.
* The sk_buff structure has changed again; the changes will force a recompile but shouldn't otherwise be a problem.
* Version 19 of the wireless extensions has been merged. Among other things, this version deprecates the get_wireless_stats() method in the net_device structure.
* The klist API has changed. The order of the parameters has been reversed for klist_add_head() and klist_add_tail(). It is now necessary to provide a pair of reference counting functions when setting up a list with klist_init().
* The relayfs virtual filesystem, which enables high-rate data transfers between the kernel and user space, has been merged.
* kzalloc() has been added as a way of obtaining pre-zeroed memory.
* Two new versions of schedule_timeout() have been added.
* The new TASK_INTERACTIVE state flag tells the scheduler not to perform the usual accounting on sleeping processes.
* SKB's which are expected to be cloned can be efficiently allocated with alloc_skb_fclone().
* A few new helper functions for mapping block I/O requests have been added; see this article for details.
* Securityfs, a virtual filesystem intended for use with security modules, has been merged.
2.6.13 (August 28, 2005)
* The HZ constant is now configurable at kernel build time.
* The timer API now includes try_to_del_timer_sync(), which makes a best effort to delete the timer; it is safe to call in atomic context.
* The block_device_operations structure now has an unlocked_ioctl() member.
* The return value from netif_rx() has changed; it now will return one of only two values: NETIF_RX_SUCCESS or NETIF_RX_DROP.
* pci_dma_burst_advice can be used by PCI drivers to learn the optimal way of bursting DMA transfers.
* The text searching API has been added.
* A new memory allocation function, kzalloc(), has been added.
2.6.12 (June 17, 2005)
* cancel_rearming_delayed_work() was added to the workqueue API.
* The timeout value passed to usb_bulk_msg() and usb_control_msg() is now expressed in milliseconds instead of jiffies.
* An interrupt-disabling spinlock is used in the rwsem implementation. It was never correct to call one of the variants of down_read() or down_write() with interrupts disabled, but it is even less correct now.
* The fields in the net_device structure have been rearranged, which will break binary-only drivers.
* kref_put() now returns an int value: nonzero if the kref was actually released.
* kobject_add() and kobject_del() no longer generate hotplug events. If you need these events, you must call kobject_hotplug() explicitly. The wrapper functions kobject_register() and kobject_unregister() do still generate hotplug events.
* kobj_map() no longer takes a subsystem argument; instead, it needs a pointer to a semaphore which it can use for mutual exclusion.
* A new function, sysfs_chmod_file(), allows permissions to be changed on existing sysfs attributes.
* There is a new generic sort() function which should be used in preference to creating yet another implementation.
* A new attribute (__nocast) is being used with sparse to disable a number of implicit casts and find probable bugs.
* io_remap_page_range() is now deprecated; use io_remap_pfn_range() instead.
* A set of functions has been added to work with big-endian I/O memory.
* synchronize_kernel() is deprecated. Callers should instead use either synchronize_sched() (to verify that all processors have quiesced) or synchronize_rcu() (to verify that all processors have exited RCU critical sections).
* The flag argument to blk_queue_ordered() has changed to indicate how ordered writes are handled by the device. Possible values are QUEUE_ORDERED_NONE (ordering is not possible), QUEUE_ORDERED_TAG (ordering is forced with request tags), and QUEUE_ORDERED_FLUSH (ordering is done with explicit flush commands). For the last case, the request queue has two new methods, prepare_flush_fn() and end_flush_fn(), which are called before and after a barrier request.
* A new function, valid_signal(), can (and should) be used to test whether signal numbers from user space are valid.
* The Developers Certificate of Origin, the document acknowledged by all those "Signed-off-by:" headers, has changed. The new version adds a clause noting that contributions - and the information that goes with them - are public information which can be redistributed.
2.6.11 (March 2, 2005)
* The kernel now performs access checking for read() and write() calls before invoking the driver- or filesystem-specific file_operations method.
* The bcopy() function, unused in the mainline kernel, has been removed.
* The prototype of the suspend() method in struct pci_driver has changed; the state parameter is now of type pm_message_t.
* The rwlock_is_locked() macro has been removed; instead, use either read_can_lock() or write_can_lock(). There is also a new spin_can_lock() for regular spinlocks.
* Three new ways of waiting for completions have been added: wait_for_completion_interruptible(), wait_for_completion_timeout(), and wait_for_completion_interruptible_timeout().
* For USB drivers: the usb_device_descriptor and usb_config_descriptor structures now keep all fields in the wire (little-endian) form. [GKH]
* pci_set_power_state() and pci_enable_wake() have new prototypes: power states are represented with the pci_power_t type rather than an int. [GKH]
* The Big Kernel Semaphore patch was merged. As a result, code which is protected by lock_kernel() is now preemptible. This change should not affect most code developed in this century, but there are always exceptions.
* The file_operations structure now contains an unlocked_ioctl() member. If that member is non-NULL, it will be called in preference to the regular ioctl() method - and the big kernel lock will not be held. New code should use unlocked_ioctl() and the programmer should ensure that the proper locking has been performed.
There is also a new compat_ioctl() method which is called, if present, when a 32-bit process calls ioctl() on a 64-bit system.
* Run-time initialization of spinlocks is being converted away from the assignment form (using SPIN_LOCK_UNLOCKED) to explicit spin_lock_init() calls. No noises have yet been made about removing SPIN_LOCK_INIT, but the writing should be considered to be on the wall. If and when the real-time preemption patches are merged, the assignment form may no longer be possible.
* debugfs has been merged; it is a virtual filesystem intended for use by kernel hackers who want to export debugging information from their code.
* Binary attributes in sysfs can now offer mmap() support; see this patch for the details.
* Four-level page tables have been merged. This change affects surprisingly little code, but, if you are manually walking through the page table tree, you will have to take the new level into account.
* Socket buffers can be obtained from alloc_skb_from_cache(), which uses a slab cache.
* A new memory allocation flag (__GFP_ZERO) was added; it allows kernel code to request that the allocated memory be zeroed. It is part of the larger prezeroing patch which has not, yet, been merged.
* Linus has reimplemented pipes with a circular buffer construct which will, eventually, be mutated into a more generic form.
* Work is being done toward the goal of removing the semaphore from struct subsystem. If your code depends on this semaphore, which it shouldn't, expect to have to change it soon.