2.6.15
Released 3 January, 2006 (fifteen years and a day since Linus bought the machine that got Linux started) changelog
Kernel Core changes
VFS changes: The "shared subtree" patches have been merged. Shared subtree semantics provide the building blocks for features like per-user-namespace, "files as directories" and versioned filesystems Detailed LWN article, Documentation, original Alexander Viro's RFC. Patches:
beginning of the shared-subtree proper: A private mount does not forward or receive propagation. This patch provides user the ability to convert any mount to private (commit)
introduce shared mounts: This creates shared mounts. A shared mount when bind-mounted to some mountpoint, propagates mount/umount events to each other. All the shared mounts that propagate events to each other belong to the same peer-group (commit)
introduce slave mounts: A slave mount always has a master mount from which it receives mount/umount events. Unlike shared mount the event propagation does not flow from the slave mount to the master (commit)
handling of shared mounts: This makes bind, rbind, move, clone namespace and umount operations aware of the semantics of slave mount (commit)
shared mount handling: bind and rbind: Implement handling of MS_BIND in presence of shared mounts (commit)
unbindable mounts: An unbindable mount does not forward or receive propagation. Bind semantics: It is invalid to bind mount an unbindable mount. Move semantics: It is invalid to move an unbindable mount under shared mount. Clone-namespace semantics: If a mount is unbindable in the parent namespace, the corresponding cloned mount in the child namespace becomes unbindable too. Note: there is subtle difference, unbindable mounts cannot be bind mounted but can be cloned during clone-namespace (commit)
shared mount handling: move: Implement handling of mount --move in presence of shared mounts (commit)
shared mount handling: umount: An unmount of a mount creates a umount event on the parent. If the parent is a shared mount, it gets propagated to all mounts in the peer group (commit)
Page table scalability improvements: Currently, a single page table lock is used to protect all operations on an address space's page tables. This has been detected to cause scalability problems in large multiprocessor systems ej: 512-cpu SGI altix, specially in heavily multithreaded workloads (threads of a same process share the same address space and hence the same page table lock). With this patch, a separate spinlock per page-table page is used, to guard the page table entries in that page. Splitting the lock is not quite for free: another cacheline access. So for now enable it by config for machines with 4 or more CPUs. While this (and many other scalability changes) may look high-end oriented now, remember that cheap multi-core desktops CPUs are there. (LWN article) (benchmark vs SGI's "reduced locking by using atomic page table operations" non-merged approach) (commit)
The page table scalability changes caused a small regression with respect to maximum latency. If such regression affects you stick with 2.6.14 until it's fixed in future releases
.text page fault SMP scalability optimization: This fixes a case where large systems wouldn't scale well while faulting in the .text. The reason was a useless overwrite of the same pte from all cpu (commit)
Reorder struct files_struct: The file_lock spinlock sits close to mostly read fields of 'struct files_struct'. In SMP (and NUMA) environments, each time a thread wants to open or close a file, it has to acquire the spinlock, thus invalidating the cache line containing this spinlock on other CPUS. This patch microoptimizes this by moving the spinlock to another cache line, so that concurrent threads can share the cache line containing 'count' and 'fdt' fields. It's worth up to 9% on a microbenchmark using a 2-physical-4-virtual CPU (commit)
Swaptoken tuning: It turns out that the original swap token implementation, by Song Jiang, only enforced the swap token while the task holding the token is handling a page fault, this patch approximates that, like the page fault code does. It has the effect of automatically, and gradually, disabling the enforcement of the swap token when there is little or no paging going on, and "turning up" the intensity of the swap token code the more the task holding the token is thrashing (commit)
Demand faulting for huge pages (commit)
Add generic memory add/remove and supporting functions for memory hotplug (commit)
"Cooperating processes" for the anticipatory I/O scheduler: Introduce the notion of cooperating processes (those that submit requests close to one another), and use these statistics to make better choices about whether or not to do anticipatory waiting (commit)
Generic dispatch queue: Implements generic dispatch queue which can replace all dispatch queues implemented by each iosched (mailing list) (LWN article) (commit)
Reimplement elevator online switching code (commit)
Process Events Connector: It reports fork, exec, id change, and exit events for all processes to userspace. Applications that may find these events useful include accounting/auditing (e.g. ELSA), system activity monitoring (e.g. top), security, and resource management (e.g. CKRM) (commit)
RCU torture-testing kernel module: This adds a tristate CONFIG_RCU_TORTURE_TEST, which enables an intense torture test of the RCU infrastructure. This is needed for testing due to the continued changes to the RCU infrastructure (commit)
Driver Core: add the ability for class_device structures to be nested: Allows struct class_device to be nested, so that another struct class_device can be the parent of a new one, instead of only having the struct class be the parent (commit) and add uevent sysfs attribute to re-emit device hotplug events (commit). Also, introduce struct platform_driver (allows the platform device driver methods to be passed a platform_device structure instead of instead of a plain device structure, and therefore requiring casting in every platform driver) (commit). Due to some of those changes, only udev versions 071 or higher will be able to run in 2.6.15.
Implement nice support across physical cpus on SMP to obtain good distribution of tasks of different nice values (commit)
make /proc/mounts pollable (commit)
SELinux: Enables files created on a MLS-enabled SELinux system to be accessible on a non-MLS SELinux system (commit)
Add LSM hooks for key management facilities (see link) (commit)
Add vmalloc_node(size, node) (allocate necessary memory on the specified node) and get_vm_area_node(size, flags, node) (commit)
SHM_NORESERVE flags for shmget(): Similar to MAP_NORESERVE for shared memory segments. This is mainly to avoid abuse of OVERCOMMIT_ALWAYS and this flag is ignored for OVERCOMMIT_NEVER (commit)
Add vm_insert_page() to use for drivers, which need to insert individual pages into a user vma without the hassles of PAGE_RESERVED (commit)
Architecture-specific
- i386
generic cmpxchg. Makes cmpxchg generally available on the i386 platform, providing emulation of cmpxchg suitable for uniprocessor if built and run on 386 - necessary for multithreaded environments with libraries using cmpxchg (commit)
hot plug CPU support of physical add of new processors (hotplug disable/enable of already existing CPUs was already supported) (commit)
- x86-64
x86-64: Add a new 4GB GFP_DMA32 zone between the GFP_DMA and GFP_NORMAL zones. Full details in the commit link (commit)
x86-64: Support for AMD specific MCE Threshold. DRAM Errors Threshold Register realized under AMD K8 Rev F, this register is used to count correctable and uncorrectable ECC errors that occur during DRAM read operations. The user may interface through sysfs files in order to change the threshold configuration (commit)
x86-64: Support ULI/ALI 1689 bridge (commit)
Support for shared HPET interrupts: The driver previously acknowledged interrupts for both edge and level interrupts, but didn't actually allow a shared interrupt in the latter case (commit)
- ppc
ppc64: support 64k pages. Adds a new CONFIG_PPC_64K_PAGES which, when enabled, changes the kernel base page size to 64K. The resulting kernel still boots on any hardware. On current machines with 4K pages support only, the kernel will maintain 16 "subpages" for each 64K page transparently (commit)
ppc64: CPU freq support using 970FX powertune facility for iMac G5 and SMU based single CPU desktop (commit)
ppc64: Adds the ability to the SMU driver to recover missing calibration partitions from the SMU chip itself. It also adds some dynamic mechanism to /proc/device-tree so that new properties are visible to userland (commit)
ppc64: This adds a new thermal control framework for Powermac, along with the implementation for Powermac8,1, Powermac8,2 (iMac G5 rev 1 and 2), and Powermac9,1 (latest single CPU desktop) (commit)
ppc: add support for new powerbooks (late 2005 edition). This enables the ATA controller, Gigabit ethernet and basic AGP setup. Bluetooth works out-of-the box after running hid2hci. Still remaining is to get the touchpad to work (commit)
Add support for the AMCC PowerPC 440SPe SoC, including PCI Express in root port mode (commit)
- Arm
ARM: Add the infrastructure to support hotplug CPU (commit), support for local timers (commit) and optimized SHA1 implementation (commit)
ARM: Adds support for omap24xx series of processors (commit)
ARM: NSLU2 machine support (commit)
Add support for SharpSL Zaurus power and battery management core driver (commit), add support for the Sharp SL-6000x (Tosa) series of PDAs (commit) and add support for its MMC, IRDA and UDC devices, also add a platform device for the keyboard driver (commit), support for sharp zaurus SL-5500 touchscreen (commit) and its PCMCIA slot (commit); add Akita (SL-C1000) machine support (commit), add PM device driver for the SL-Cx00 (commit) and SL-C7x0 (commit) machines.
- Mips
IA64: 4-level page table support (commit)
SH: Superhyway support for SH4-202 (commit)
- i386
Filesystems
NTFS write support: NTFS finally implements write support so "vim /ntfs/foo.txt" works. You can write(2) to a file even beyond the end of the existing file. Resident non-resident files and are supported. Sparse files can also be written and holes will be filed appropriately. truncate(2), ftruncate(2) and open(2) with O_TRUNC flag also works. There're some limitations with heavily fragmented files which you won't be allowed to change. Also, notice that creation/deletion of files and directories is still not supported and mmap(2) based writes is still not complete (commit)
Big CIFS update: Lots of performance improvements, support for mounting older pre-CIFS servers such as windows 9x and Me (commit), mount option for disabling the default behavior of sending byte range lock requests to the server (commit), add filesystem notification changes (commit), finish cifs mount option which requests case insensitive path name matching (commit), suspend support (commit)
Networking
IPv4/IPv6: UFO (UDP Fragmentation Offload) Scatter-gather approach: UFO is a feature wherein the Linux kernel network stack will offload the IP fragmentation functionality of large UDP datagram to hardware. This will reduce the overhead of stack in fragmenting the large UDP datagram to MTU sized packets (commit)
Randomize the port selected on bind() for connections to help with possible security attacks. It should also be faster in most cases because there's no need for a global lock (commit)
Add nf_conntrack subsystem: The existing connection tracking subsystem in netfilter can only handle ipv4. There were two choices present to add connection tracking support for ipv6, we could either duplicate all of the ipv4 connection tracking code into an ipv6 counterpart, or (the choice taken by these patches) we could design a generic layer that could handle both ipv4 and ipv6 and thus requiring only one sub-protocol (TCP, UDP, etc.) connection tracking helper module to be written. In fact nf_conntrack is capable of working with any layer 3 protocol (commit)
Generic netlink family: The generic netlink family builds on top of netlink and provides simplifies access for the less demanding netlink users. It solves the problem of protocol numbers running out by introducing a so called controller taking care of id management and name resolving (commit); and a new type-safe interface for netlink messages and attribute handling. The interface is fully binary compatible with the old interface towards userspace. Besides type safety, this interface features attribute validation capabilities, simplified message construction, and documentation (commit)
Add "revision" support for having multiple revisions for each match/target in arp_tables and ip6_tables (commit)
PPP MPPE encryption module, it implements the Microsoft Point-to-Point Encryption method as a PPP compressor/decompressor. This is necessary for Linux clients and servers to interoperate with Microsoft Point-to-Point Tunneling Protocol (PPTP) servers (either Microsoft PPTP servers or the poptop project) which use MPPE to encrypt data when creating a VPN (commit)
Appropriate Byte Count support (RFC 3465). ABC is a way of counting bytes ack'd rather than packets when updating congestion control (commit)
Wireless updates: Hardware crypto and fragmentation offload support (commit), QoS (WME) support (commit), "wireless spy support" (commit), mixed PTK/GTK CCMP/TKIP support (commit) and WE-19 HostAP support (commit)
Speed up SACK processing: Use "hints" to speed up the SACK processing. Various forms of this have been used by TCP developers (Web100, STCP, BIC) to avoid the 2x linear search of outstanding segments (commit)
Drivers
libata: Add support for ATA passthru (arbitrary ATA command execution, necessary for SMART support) (commit), C/H/S support for older devices (commit), support for Silicon Image 3131/3531 controllers (commit), Marvell SATA family (DMA mode) (commit) and Promise SATA 300 TX2plus PDC40775 (commit)
IDE support for: AMD Geode GX/LX (commit), CS5535 (commit) and M3A-2170(Mappi-III) board on the m32r architecture (commit)
IDE support on the Sibyte Swarm evaluation boards and it's relatives for the BCM1250 family of system on a chip (commit)
IDE via82cxxx driver: support multiple controllers in the same system (commit) and remove /proc/via file: The same date can be got from this userspace program: http://www.reactivated.net/software/viaideinfo/ (commit). Also, add support for VIA VT6410 (commit)
sis5513: enable ATA133 for the sis 965 southbridge (commit)
Input: add Wistron driver present in fujitsu-siemens Amilo Pro V2000, Xeron Sonicpro X 155G and Acer Aspire 1500 notebooks. The driver also allows enabling/disabling the embedded wireless NIC (using the "Wifi" button) (commit)
e1000: Implementation of the multi-queue feature (commit) and support for 82571 and 82572 controllers (commit)
tg3: add complete support for 5714/5715 (commit)
Add sysfs support for ide tape (commit), raid5 (commit), md (commit), (commit)
fbcon: Add support for console rotation. Can be enabled with a boot option fbcon=rotate:n, where n = 0 - normal, n = 1 - 90 degrees (clockwise), n = 2 - 180 degrees (upside down), n = 3 - 270 degrees (counterclockwise); or at runtime with "echo n > /sys/class/graphics/fb[num]/con_rotate" to set the angle of rotation of the current console or "echo n > /sys/class/graphics/fb[num]/con_rotate_all" to set the angle of rotation globally (commit)
Support for the Artemis and ATIK astronomical based USB CCD cameras (commit)
USB: delete the bluetty driver (commit)
Nvidia Geforce 7800 series (7800, 7800 GTX, 7800 GO and 7800 GTX GO cards) framebuffer support (commit), add radeon PCI Express support to complete the support for newest radeon cards along with the r300 3d initial support which went into 2.6.14 (commit), Matrox mystique AGP support (commit), add partial support for GMA900 within the i915GM chipset (commit)
MPC8xx PCMCIA support (PowerPC 8xx series PCMCIA controller) (commit)
Adds a RapidIO subsystem to the kernel. RIO is a switched fabric interconnect used in higher-end embedded applications http://www.rapidio.org (LWN article) (commit)
MTD: add Resident Flash Disk (RFD) support. This type of flash translation layer (FTL) is used by the Embedded BIOS by General Software. http://www.gensw.com/pages/prod/bios/rfd.htm (commit) and add initial support for OneNAND flash chips, a new flash technology from Samsung with integrated SRAM buffers and logic interface (commit)
Support for SA1100 Jornada flash device support (commit)
Support the SMC9111 networking device present on DB1200 boards (commit)
New Omnikey Cardman 4040 (commit) and 4000 (commit) smartcard reader driver