Spam: Ulrich Drepper, the libc maintainer, has published a must-read paper about "What every programmer should know about memory"
Linux kernel version 2.6.24 Released 24 January 2008 (full SCM git log)
Contents
- Short overview (for news sites, etc)
-
Important things (AKA: ''the cool stuff'')
- CFS improvements
- Tickless support for x86-64, PPC, UML, ARM, MIPS
- New wireless drivers and configuration interface
- Anti-fragmentation patches
- SPI/SDIO support in the MMC layer
- USB authorization
- Per-device dirty memory thresholds
- PID and network namespaces
- Large Receive Offload (LRO) support for TCP traffic
- Task Control Groups
- Linux Kernel Markers
- x86-32/64 arch reunification
- New drivers
- Subsystems
- Drivers
- Crashing soon a kernel near you
1. Short overview (for news sites, etc)
2.6.24 includes CPU "group scheduling", memory fragmentation avoidance, tickless support for x86-64/ppc and other architectures, many new wireless drivers and a new wireless configuration interface, SPI/SDIO MMC support, USB authorization, per-device dirty memory thresholds, support for PID and network namespaces, support for static probe markers, SELinux performance improvements, SATA link power management and port multiplier support, Large Receive Offload in network devices, memory hot-remove support, a new framework for controlling the idle processor power management, CIFS ACLs support, many new drivers and many other features and fixes.
2. Important things (AKA: ''the cool stuff'')
2.1. CFS improvements
Performance/size improvements
The CFS task scheduler merged in Linux 2.6.23 is getting some microoptimization work in 2.6.24. 2.6.23's CFS context switching is more than 10% slower than the old task scheduler. With the optimization done in 2.6.24, CFS is now even a bit faster than the old task scheduler (which is quite fast already). The compiled size of the scheduler has also improved and now it's a bit smaller on UP and a lot smaller in SMP.
Fair Group Scheduling
You can read this recommended article about the Fair Group Scheduling feature.
Another feature in the scheduler is Fair Group Scheduling. Normally the scheduler operates on individual tasks and strives to provide fair CPU time to each task. Sometimes, it may be desirable to group tasks and provide fair CPU time to each such task group. For example, it may be desirable to first provide fair CPU time to each user on the system and then to each task belonging to a user. In other words, given two users, one running one cpu-bound process and the other two cpu-bound processes, you may want to give 50% of CPU time to the first users and his task, and 50% to the other user, which will be shared between his two processes - 25% of CPU time for each. Group Scheduling provides the ability to choose partitions to support the previous scenario.
At present, there are two (mutually exclusive) mechanisms to group tasks for CPU bandwidth control purpose: 1) Group scheduling based on user id, which is the case previously mentioned as example. This mechanism is configurable, which means you can have more CPU time than just a 50%/50% rule - for example, you can assign user root double the priority of other users. 2) Group scheduling. This mechanism (based in the "task control groups", see section 2.10) lets the administrator create arbitrary groups of tasks (ie: "multimedia", "compiling"), set how much CPU time 'priority' you want to give that group by catting the value to its cpu_share file, and then attach a PID to whatever task group you want. Documentation on how to use those two features can be found in Documentation/sched-design-CFS.txt.
guest time reporting
Additionally, the task scheduler in 2.6.24 is adding a new "guest" field after "system" and "user" in /proc/<PID>/stat, where it tracks how much CPU time a task is spending in running a 'virtual' CPU.
2.2. Tickless support for x86-64, PPC, UML, ARM, MIPS
The Tickless feature was added in Linux 2.6.21. This feature allows the kernel to disable timer interrupts for longer, variable periods, saving some power and improving performance, especially in virtual guests. 2.6.24 adds tickless support to the widespread 64-bit x86 architecture, but also to PPC, the virtualized architecture UML, and some variants of ARM and MIPS. They join the already tickless supported x86-32, SPARC-64 and SH.
2.3. New wireless drivers and configuration interface
New wireless configuration interface
In Linux 2.6.22, Linux got a new wireless stack. This new stack is backwards compatible with the old ioctl-based configuration of the old stack. However, the new stack was designed to have a much better configuration interface, based on netlink. While the backwards compatibility isn't going away, all wireless configuration tools are recommended to have long-term plans to switch to the new interface.
Drivers
In Linux 2.6.22, the mac80211 (formerly d80211) wireless stack was merged, but not many drivers that use this new stack have been merged (only one). Linux 2.6.24 will have a lot of new wireless drivers using the new stack; 2.3 MB of source files in total:
iwlwifi driver for the Intel PRO/Wireless 3945ABG/BG Network Connection and Intel Wireless Wifi Link AGN (4965) adapters (commit)
rt2x00 driver for Ralink wireless hardware (rt2400 pci/pcmcia, rt2500 pci/pcmcia, rt61 pci/pcmcia, rt2500 usb, rt73 usb). Check the hardware matrix (commit)
adm8211 driver for the ADMtek ADM8211x based wireless cards. These are PCI/mini-PCI/Cardbus 802.11b chips found in cards such as: Xterasys Cardbus XN-2411b, Blitz Netwave Point PC, Trendnet 221pc, Belkin F5d6001, SMC 2635W, Linksys WPC11 v1, Fiberline FL-WL-200X, 3com Office Connect (3CRSHPW796), Corega WLPCIB-11, SMC 2602W V2 EU, D-Link DWL-520 Revision C (commit)
b43 driver for modern BCM43xx devices. This driver supports the new BCM43xx IEEE 802.11G devices, but not the old IEEE 802.11B devices - those are supported by the b43legacy driver. This driver uses V4 firmware, which must be installed separately using b43-fwcutter (commit)
b43legacy driver for legacy BCM43xx devices from Broadcom (BCM4301 and BCM4303) and early model 802.11g chips (BCM4306 Ver. 2) used in the Linksys WPC54G V1 PCMCIA devices. Newer 802.11g and 802.11a devices need the b43 driver. This driver uses V3 firmware, which must be installed separately using b43-fwcutter (commit)
p54 driver for prism54 softmac pci/usb hardware (commit)
Driver for Marvell Libertas 8385 Compactflash 802.11b/g cards (commit)
Libertas sdio driver (commit)
There are also a lot of network (non-wireless) drivers being merged, look at the section 2.14, "new drivers"
2.4. Anti-fragmentation patches
You can read this recommended article about the "Anti-fragmentation" feature.
A known weakness of the Linux kernel is the memory fragmentation that the system faces after days without rebooting or after intense operations. This makes difficult to do "high-order" memory allocations (allocations larger than the native page size - 4 KB on x86). It's relatively easy to trigger those cases. For example a network driver may try to allocate 4 pages to store data received from the network. This allocation may not succeed despite there being plenty of free memory available, as there is no single uninterrupted block of memory big enough (fragmentation). For almost three years patient developers have been continually developing and improving the anti-fragmentation patches to improve the memory allocator and reduce the tendency to fragment. These efforts have been finally merged in 2.6.24.
The purpose of this feature is to reduce external fragmentation by grouping pages of related types together. When pages are migrated (or reclaimed under memory pressure), large contiguous pages will be freed. Allocations are categorized by their ability to migrate. Tests show that about 60-70% of physical memory can be allocated on a desktop after a few days uptime. In benchmarks and stress tests, it has been found that 80% of memory is available as contiguous blocks at the end of the test. To compare, a standard kernel was getting < 1% of memory as large pages on a desktop and about 8-12% of memory as large pages at the end of stress tests.
2.5. SPI/SDIO support in the MMC layer
The MMC layer, which is the code which implements support for MMC/SD memory cards, is suffering one of the biggest transformations in its life, because it has been heavily modified to get support for SDIO and SPI.
SDIO is an alias for "Secure Digital I/O", and it allows to use the SD card slot (in the devices that support SDIO, ie. PDAs, cell phones or laptops) to use "small devices designed for the SD form factor, like GPS receivers, Wi-Fi or Bluetooth adapters, modems, Ethernet adapters, barcode readers, IrDA adapters, FM radio tuners, TV tuners, RFID readers, digital cameras, or other mass storage media such as hard drives" (quote from the Wikipedia entry). There are currently three working drivers for this new stack: sdio_uart, a driver for the standardised GPS interfaces; libertas_sdio, a driver for Marvell's 8686 Libertas wifi chip; and hci_sdio, a driver for the standardised bluetooth interface.
SPI is required by SDIO, and it's a "bus" (like IDE, SATA, USB...) which is used to access a wide range of devices, but more importantly, some systems require to access MMC/SD cards using a SPI controller instead of using a "native" MMC/SD controller. This has a disadvantage of being relatively high overhead, but a compensating advantage of working on many systems without dedicated MMC/SD controllers. 2.6.24 includes support for SPI and a experimental "MMC/SD over SPI" driver. (commit)]
2.6. USB authorization
As part of the efforts to make the USB layer ready for wireless USB, Linux 2.6.24 is getting support for USB device authorization, which allows you to control if a USB device (wireless or not) can be used or not in a system. As of now, when a USB device is connected it is configured and its interfaces immediately made available to the users. With this modification, only if root authorizes the device to be configured will then it be possible to use it.
Beside of providing an infrastructure to allow secure usage of wireless USB devices, this feature also allows to implement kiosk-style lockdown of USB devices, fully controlled by user space. Every USB device has a corresponding /sys/bus/usb/devices/<DEVICE>/authorized file. Writing 1 to that file authorizes a device to connect, 0 deauthorizes it. USB hosts can also set new devices connected to be deauthorized by writing 0 (or 1 to authorize) to /sys/bus/usb/devices/usb<X>/authorized_default. By default, wired USB devices are authorized by default to connect, and wireless USB hosts deauthorize by default all new connected devices (this is so because they need to do an authentication phase before authorizing).
2.7. Per-device dirty memory thresholds
You can read this recommended article about the "per-device dirty thresholds" feature.
When a process writes data to the disk, the data is stored temporally in 'dirty' memory until the kernel decides to write the data to the disk ('cleaning' the memory used to store the data). A process can 'dirty' the memory faster than the data is written to the disk, so the kernel throttles processes when there's too much dirty memory around. The problem with this mechanism is that the dirty memory thresholds are global, the mechanism doesn't care if there are several storage devices in the system, much less if some of them are faster than others. There are a lot of scenarios where this design harms performance. For example, if there's a very slow storage device in the system (ex: a USB 1.0 disk, or a NFS mount over dialup), the thresholds are hit very quickly - not allowing other processes that may be working in much faster local disk to progress. Stacked block devices (ex: LVM/DM) are much worse and even deadlock-prone (check the LWN article).
In 2.6.24, the dirty thresholds are per-device, not global. The limits are variable, depending on the writeout speed of each device. This improves the performance greatly in many situations.
2.8. PID and network namespaces
You can read this recommended article, and this one, about the "PID and network namespaces" feature.
Usually, there's a global PID namespace for a whole Linux system: The list of processes contains all the processes running in the system. There's also a global view of the networking stack (routing tables and firewall rules, etc). However, operating-system virtualization like OpenVZ or Vserver need to have different views of the PID namespace and the networking stack. Linux 2.6.24 adds PID namespaces and basic support for network namespaces. They're used through the CLONE_NEWPID and CLONE_NEWNET clone() flags.
2.9. Large Receive Offload (LRO) support for TCP traffic
You can read this recommended article about the "Large Receive Offload" feature.
LRO combines received tcp packets to a single larger tcp packet and passes them then to the network stack in order to increase performance (throughput). After many out-of-the-tree iterations, mainline Linux is getting support for this feature (commit), (commit), (commit)
2.10. Task Control Groups
There have been various proposals in the Linux arena for resource management/accounting and other task grouping subsystems in the kernel (Resgroups, User Beancounters, NSProxy cgroups, and others). Task Control Groups is the framework that is getting merged in 2.6.24 to fulfill the functionality that lead to the creation of such proposals. TCG can track and group processes into arbitrary "cgroups" and assign arbitrary state to those groups, in order to control its behaviour. The intention is that other subsystems hook into the generic cgroup support to provide new attributes for cgroups, such as accounting/limiting the resources which processes in a cgroup can access.
For example, cpusets (see Documentation/cpusets.txt) allows you to associate a set of CPUs and a set of memory nodes with the tasks in each cgroup. The CFS group scheduling feature uses cgroups to control the CPU time that every cgroup can get. Other various resource management and virtualization/cgroup efforts can become task cgroup clients. The configuration interface is described in Documentation/cgroups.txt
2.11. Linux Kernel Markers
You can read this recommended article about the "Linux Kernel Markers" feature.
The Linux Kernel Markers implement static probing points for the Linux kernel. Dynamic probing system like kprobes/dtrace can put probes pretty much anywhere. However, the scripts that dynamic probing points use can become quickly outdated, because a small change in the kernel may trigger a rewrite of the script, which needs to be maintained and updated separately, and will not work for all kernel versions. Thats why static probing points are useful, since they can be put directly into the kernel source code and hence they are always in sync with the kernel development. Static probing points apparently can also have some performance advantages. They've no performance costs when they're not being used.
The kernel markers are a sort of "derivative" of the long-time external patchset "Linux Trace Toolkit" (LTT), which is a feature that has been around since 1999. The Kernel Markers are a feature needed for the SystemTap project. In this release, there are no probing points being included, but many will be certainly included in the future, and some tracking tools like blktrace will probably be ported to this kind of infrastructure in the future.
2.12. x86-32/64 arch reunification
You can read this recommended article.
When support for the x86-64 AMD architecture was developed, it was decided to develop it as a "fork" of the traditional x86 architecture for comodity reasons. Many patches needed to patch a file in the i386 architecure directory, and another similar patch for the duplicated file in the x86_64 directory. It has been decided to unify both architectures in the same directory again.
This reunification has not been done in a radical way. In this release, both architectures have been unified in arch/x86, but only in appearance. All the source files in i386 and x86-64 directories have been moved to arch/x86, but renaming them with "_32" and "_64" suffixes. Ex: arch/i386/kernel/reboot.c has been moved to arch/x86/kernel/reboot_32.c, and arch/x86_64/kernel/reboot.c has been moved to arch/x86/kernel/reboot_64.c. Makefiles have been modified accordingly. So for now the reunification has been pretty much just a relocation of all the files and adaptation of the build machinery to make it compile just as it'd have been compiled in the old separated directories, done mostly with scripts.
In the future lots of those files will be unified and shared by both architectures, ex. reboot_32.c and reboot_64.c into reboot.c, and many files have already been unified in this release. Others will keep separated forever, due to the differences between both architectures.
2.13. New drivers
Graphics
Add the uvesafb driver. uvesafb is an enhanced version of vesafb. It uses a userspace helper (v86d) to execute calls to the x86 Video BIOS functions. The driver is not limited to any specific arch and whether it works on a given arch or not depends on that arch being supported by the userspace daemon (commit), (commit)
Add a framebuffer driver for Blackfin BF54x framebuffer device driver (commit)
SATA/IDE
Add driver for bf548 on chip ATAPI controller. (commit)
Add AVR32 PATA driver (commit)
Add platform IDE driver, used mostly for Memory Mapped IDE devices, like Compact Flashes running in True IDE mode (commit)
Add driver pata_cs5536 ATA driver for Geode companion chip (commit)
Add driver for Freescale 3.0Gbps SATA Controllers (commit)
Network(wireless)
- Look at the section 2.3 "New wireless drivers and configuration interface"
Network
Add ixgbe driver for Intel(R) 82598 PCI-Express 10GbE adapters (v4) (commit)
Add new E1000E pci-express e1000 driver (currently for ICH9 devices only) (commit)
Add Sun Neptune ethernet driver. (commit)
Add fast ethernet controller driver for mpc52xx (commit)
Add driver for IP1000A GBit cards (commit)
Add Tehuti network driver. (commit)
Add AR7 ethernet driver (commit)
Add device tree-aware EMAC driver (commit)
Virtual ethernet device driver. (commit)
Add IrDA driver for Kingsun Dazzle IrDA USB (commit),
Add IrDA driver for Kingsun KS-959 IrDA USB (commit)
Sound
Add driver for the AT73C213 DAC using Atmel SSC (commit)
Add ASoC CS4270 codec device driver (commit)
Add driver for Gallant SC-6000 card and clones: Audio Excel DSP 16 and Zoltrix AV302 (commit)
MTD
Add map driver for NOR flash on the Intel Vermilion Range chipset (commit)
Add blackfin on-chip NAND Flash Controller driver (commit)
Add NAND Driver for Olympus MAUSB-10 and Fujifilm DPC-R1 card readers (commit)
USB
Add atmel_usba_udc driver (commit)
Add driver for CH341 USB-serial adaptor (commit)
Eagle IV chipset support (commit)
V4L/DVB
Add ivtv-fb framebuffer driver for cx23415 devices (commit)
Add a driver for Toshiba TCM825x VGA camera sensor (commit)
Add driver for the internal MPX of the Panasonic VP27s tuner (commit)
Add driver for the silicon baseband tuner MT2266 from Microtune (commit)
Adding driver for the silicon baseband tuner MT2131 from Microtune tuner (commit)
Add driver for the Samsung S5h1409 demodulator, also known as the Conexant CX24227 demodulator (commit)
Add driver for the silicon baseband tuner DIBB0070 from DIBcom (commit)
Hwmon
Add driver for FSC chips (commit)
Add driver for Fintek F71882FG and F71883FG Super-I/O chips (commit)
Add driver for Analog Devices ADT7470 chips (commit)
Add driver for Fintek F75375S/SP and F75373 chips (commit)
IBM power meter driver (commit)
Add driver for the SMSC SCH3112, SCH3114, and SCH3116 Super-I/O chips (commit)
New driver to read FB-DIMM temperature sensors on systems with the Intel 5000 series chipsets (commit)
I2C
Add Davinci I2C controller support (commit)
Bluetooth
Add generic driver for Bluetooth SDIO (commit) and USB devices (commit)
Add UART driver for Texas Instruments' BRF63xx chips (commit)
3. Subsystems
3.1. Memory management
Generic Virtual Memmap support for SPARSEMEM: SPARSEMEM is a pretty nice framework that unifies quite a bit of code over all the arches, and it would be great if it could be the default so that the various forms of DISCONTIG and other variations on memory maps can be killed. So far what has hindered this are the additional lookups that SPARSEMEM introduces for virt_to_page and page_address. This patch is a step to solve that problem and has the potential to allow to make SPARSMEM the default (and even the only) option for most systems (commit 1, 2, 3, 4, 5)
Use lockless radix-tree probe (commit)
- Memoryless nodes: Hardware from SGI, HP and Fujitsu can have sometimes configurations of nodes with CPUs but not memory
Remove ZERO_PAGE (commit)
SLUB: direct pass through of page size or higher kmalloc requests, reducing memory overhead and improving performance in many cases (commit)
oom: add oom_kill_allocating_task sysctl, which will automatically kill the OOM-triggering task instead of scanning through the tasklist to find a memory-hogging target (commit)
Add node states sysfs class attributes in /sys/devices/system/node/ (commit)
3.2. Various
cpuidle: CPU idle is a generic framework for supporting software-controlled idle processor power management. It includes modular cross-platform governors that can be swapped during runtime, including one optimized for NO_HZ, "menu" (commit), (commit)
Virtio: It's a "virtual I/O" layer which should allow common drivers to be efficiently used across most virtual I/O mechanisms. It includes a network driver, a block driver, a console driver, virtio transport for 9p, and lguest support (commit), (commit), (commit), (commit), (commit), (commit), (commit), (commit)
Remove fixed limit on number of guests, and lguests array (commit)
readahead: support of interleaved reads (commit)
Add a new per-cpuset flag called 'sched_load_balance'. When enabled in a cpuset (the default value) it tells the kernel scheduler that the scheduler should provide the normal load balancing on the CPUs in that cpuset, sometimes moving tasks from one CPU to a second CPU if the second CPU is less loaded and if that task is allowed to run there. When disabled (write "0" to the file) then it tells the kernel scheduler that load balancing is not required for the CPUs in that cpuset. This serves two purposes: 1) It provides a mechanism for real time isolation of some CPUs, and 2) it can be used to improve performance on systems with many CPUs by supporting configurations in which load balancing is not done across all CPUs at once, but rather only done in several smaller disjoint sets of CPUs (commit)
Arbitrary boot kernel in hibernation resume: It's not possible to hibernate a system and try to resume from hibernation with a different kernel - 2.6.24 changes that (commit), (commit), (commit), (commit), (commit), (commit)
Chained sg support (commit), (commit), (commit), (commit), (commit), (commit)
Export processes resource limits via /proc (commit)
Implement file posix capabilities (recommended LWN article about this feature) (commit)
Improve performance of sys_time() (improves the sysbench oltp macrobenchmark by 4-5%) (commit)
softlockup: add softlockup_thresh sysctl to control the trigger limit for softlockup warnings (commit)
Add scaled time to taskstats based process accounting (commit), (commit)
Add /sys/module/name/notes (commit)
Allow passing of arguments to user mode helper when core_pattern is a pipe (commit)
Add vmcoreinfo: This feature frees the restriction that makedumpfile users should install a vmlinux file (including the debugging information) into each system (commit)
quota: send messages via netlink (commit)
Driver core: add CONFIG_UEVENT_HELPER_PATH (commit)
Add kernel parameter to overwrite legacy pty count (commit)
unicode diacritics support (commit)
Add the MMF_DUMP_ELF_HEADERS option to /proc/pid/coredump_filter (commit)
NBD: allow hung network I/O to be cancelled (commit)
F_DUPFD_CLOEXEC fcntl() command implementation (commit)
Convert LSM into a static interface (commit)
3.3. Networking
- IPv4
- IPv6
- TCP
- UDP
Randomize port selection. (commit)
- SCTP
- DCCP
- Wireless
9p: Make transports dynamic (commit) and attach-per-user support (commit)
Add stateless NAT on IPv4 packets (commit)
Netfilter: Add xt_time match: a "time" match, which allows you to match based on the packet arrival time (at the machine which netfilter is running) or departure time/date (for locally generated packets) (commit)
Convert IP route cache garbage collection from softirq processing to a workqueue (commit)
bonding: Optionally allow ethernet slaves to keep own MAC (commit)
AF_PACKET: Don't enable global timestamps. (commit)
XFRM: xfrm audit calls (commit)
PKTGEN: Multiqueue support. (commit)
RFKILL: Add support for ultrawideband (commit), for an rfkill LED. (commit), for hardware-only rfkill buttons (commit)
3.4. Filesystems
- CIFS
- EXT4
Uninitialized Block Groups. In performance tests testing e2fsck time, e2fsck time on ext3 grows linearly with the total number of inodes in the filesytem. In ext4 with the uninitialized block groups feature, the e2fsck time is constant, based solely on the number of used inodes rather than the total inode count. Since typical ext4 filesystems only use 1-10% of their inodes, this feature can greatly reduce e2fsck time for users. With performance improvement of 2-20 times, depending on how full the filesystem is (commit), (commit)
- OCFS2
- NFS
- FUSE
- JFFS2
Add LZO compression support. (commit)
- XFS
Radix tree based inode caching (commit)
- EXT2
Ext2 port of the reservations code from ext3 (improves the performance a lot) (commit)
- EXT3
Support large blocksize up to PAGESIZE for platforms like IA64, which has a 64k page size (commit)
- UFS
Add in SunOS 4.1.x compatible mode (commit)
3.5. CRYPTO
seed: New cipher algorithm (commit)
api: Add aead crypto type (commit)
aead: Add authenc (commit)
xts: XTS blockcipher mode implementation without partial blocks (commit)
3.6. SELinux
Reduce the read/write SELinux overhead (to almost nothing in x86) (commit)
Tune avtab to reduce memory usage (commit)
Improve performance on AVC misses (commit)
Policy selectable handling of unknown classes and perms (commit)
3.7. KVM
Use the scheduler preemption notifiers to make kvm preemptible (commit)
Communicate cr8 changes to userspace - allows running 64-bit Windows (commit)
Emulate local APIC in kernel, because lightweight exits (exits which don't involve userspace) are many times faster than heavyweight exits, it makes sense to emulate high usage devices in the kernel (commit)
Emulate hlt in the kernel (commit)
Add support for in-kernel PIC emulation (commit)
In-kernel I/O APIC model (commit)
3.8. DM
3.9. Audit
Watching subtrees support (commit)
3.10. Architecture-specific changes
- x86
EFI boot support: EFI frame buffer driver. UEFI2.0 spec deprecates Universal Graphics Adapter (UGA) protocol and only Graphics Output Protocol (GOP) is produced (commit)
Enable HPET on ICH3 and ICH4 (commit)
Add HPET force support for MCP55 (nForce 5) chipsets (commit)
Force enable HPET for CK804 (nForce 4) chipsets (commit)
Add support for picopower irq router (commit)
- PPC
Enable tickless idle and high res timers for powerpc (commit), (commit), (commit)
Use 1TB segments for all kernel mappings and for user addresses of 1TB and above, on machines which support them (currently POWER5+, POWER6 and PA6T) (commit)
ppc64: support CONFIG_DEBUG_PREEMPT (commit)
AMCC PPC440EPx Sequoia board support (commit), (commit), (commit), (commit)
Walnut PPC405 board support (commit), (commit), (commit), (commit), (commit)
Add support for the core of the Bestcomm API for the Freescale MPC5200(b). The Bestcomm engine is a microcode-controlled / tasks-based DMA used by several of the onchip devices (commit), (commit), (commit),
4xx: Add RGMII support for Sequoia 440EPx (commit), add AMCC Kilauea eval board support (commit), (commit), (commit). Also, enable NEW EMAC support for Sequoia 440EPx (commit), on the PPC 440GP Ebony board (commit), on the PPC405 Walnut board (commit), on Bamboo board (commit)
Remove APUS support from arch/ppc (commit)
bootwrapper: Add CPM serial driver (commit), add 8xx cuboot support (commit), add PowerQUICC II (82xx with CPM) cuboot support (commit), add cuboot for MPC7448HPC2 platform (commit)
Add cpu feature for SPE handling (commit)
85xx: Add basic Uniprocessor MPC8572 DS port (commit)
MPC5200 low power mode (commit)
Add generic Xilinx Virtex board support (commit), (commit), (commit)
Celleb: New HTAB Guest OS Interface on Beat (commit), support for Power/Reset buttons (commit)
Add early debug console for CPM serial ports. (commit)
Embedded Planet EP88xC support (commit)
mpc82xx: Add pq2fads board support. (commit)
MPC8568E-MDS: add support for ds1374 rtc (commit)
Add basic board support for the MPC8610 HPCD (commit), (commit)
spi: Support non-QE processors (commit)
Implement logging of unhandled signals (commit)
- Blackfin
- ARM
Clocksource and clockevents for at91rm9200 (commit) and ns9xxx (commit), (commit)
Add rtc-cmos driver for ISA-based footbridge platforms (commit)
ep93xx: add cirrus logic edb9307 support (commit)
OMAP: Add minimal OMAP2430 support (commit)
OMAP: Add support for Amstrad Delta keypad (commit)
OMAP: Basic support for siemens sx1 (commit)
OMAP: Palm Tungsten|T support (commit)
PXA3xx base support (commit)
CM-X270 machine support (commit)
ITE 8152 PCI bridge support (commit)
CM-x270: PCMCIA support (commit)
- SH
Add SH7720 CPU support (commit)
Bring SMP support back from the dead (commit)
Initial SH-X3 SMP support. (commit)
Initial INTC controllers SMP support (commit)
intc support for: SH7710 (commit), SH7705 (commit), SH7785 (commit), SH7760 (commit), SH7706, SH7707, SH7708 and SH7709 (commit), x3 (commit), sh7619 (commit), sh7206 (commit)
x3proto: ILSEL IRQ support. (commit)
Magic Panel R2 board support. (commit)
Add maple bus support for the SEGA Dreamcast (commit), (commit)
- SPARC
- MIPS
Add support for BCM47XX CPUs. (commit)
Dyntick support for SMTC (commit) and clockevent/clocksource drivers for other hardware (commit), (commit), (commit), (commit), (commit), (commit)
IRQ Affinity Support for SMTC on Malta Platform (commit)
Add back support for LASAT platforms (commit)
Add GT641xx IRQ routines. (commit)
GPIO LED driver for the WGT634U machine (commit)
SYNC emulation for MIPS I processors (commit)
- AVR32
- m68knommu
- UML
- IA64
Add driver for ACPI methods to call native firmware (commit)
- S390
Add per-cpu idle time / idle count sysfs attributes. (commit)
4. Drivers
4.1. Buses
- PCI:
Add Sonics Silicon Backplane bus support (commit)
4.2. Graphics
XilinxFB: Add support for custom screen resolution (commit)
pm2fb: accelerated 24-bit fillrect (commit), accelerated imageblit (commit), Permedia 2V hardware cursor support (commit), hardware cursor support for the Permedia2 (commit)
pm3fb: mtrr support and noaccel option (commit), copyarea and partial imageblit suppor (commit), hardware cursor support (commit)
mbxfb: Improvements and some new features (commit)
pxafb: Add support for other palette formats (commit)
s3c2410fb: multi-display support (commit)
Intel FB: support for interlaced video modes (commit), (commit)
vfb: make virtual framebuffer mmapable (commit)
Radeonfb Xpress 200M RC410 support (commit)
fbdev: Support for byte-reversed framebuffer formats (commit)
ps3fb: add virtual screen and panning support (commit)
4.3. SATA/IDE
- SATA (libata)
Link power management infrastructure. Device Initiated Power Management, which is defined in SATA 2.5 can be enabled for disks which support it. This feature enables DIPM in linux when the user sets the link power management policy to "min_power". It's also possible to set the PM policy to "max_performance" or "medium_power" (commit). Implement hw link power management support for ahci (commit)
SATA Port Multiplier support (commit), (commit), (commit), (commit). Implement PMP support for ahci (commit) and sata_sil24 (commit)
ACPI-based PATA/SATA hotplug (commit)
libata_pata: ACPI support (commit)
Turn on ACPI by default (commit)
Add a IDE style DMA disable (commit)
ahci: RAID mode SATA patch for Intel Tolapai (commit), add MCP79 support to AHCI driver (commit)
pata_ns87415: Initial cut at 87415/87560 IDE support (commit)
pata_sil680: Add MMIO support (commit)
sata_nv: add SW NCQ support for MCP51/MCP55/MCP61 (commit)
- Old IDE stack
4.4. Networking
asix: Support for USB autosuspend (commit)
ax88796: add 93cx6 eeprom support (commit)
B43: LED triggers support (commit), RF-kill support (commit)
B44: port to native ssb support (commit)
bmac: add simple ethtool support for network manager (commit)
dl2k: add Sundance/Tamarack TC902x Gigabit Ethernet Adapter support (commit)
hostap_cs: Add device ID for Telekom T-Sinus 111card (commit), add Linksys card ID (commit)
ibmveth: Implement ethtool hooks to enable/disable checksum offload (commit), enable TCP checksum offload (commit), add ethtool TSO handlers (commit), add ethtool driver stats hooks (commit)
IOC3: Switch hw checksumming to ethtool configurable. (commit)
ipw2200: batch non-user-requested scan result notifications (commit)
libertas: monitor mode support for OLPC firmware (commit)
myri10ge: add IPv6 TSO support (commit)
netconsole: Support dynamic reconfiguration using configfs (commit), support multiple logging targets (commit)
ns83820: add ethtool media support (commit)
p54usb: Add device ID for Linksys WUSB54AG (commit)
pasemi_mac: enable iommu support (commit)
pcnet32: add suspend and resume capability (commit)
r8169: MSI support (commit)
rtl8187: Add device ID for HP wireless print kit usb dongle (commit)
skge: eeprom support (commit), add a debug interface (commit)
TG3: Add 5761 support (commit), (commit), add 5784 and 5764 support. (commit), add 5723 support (commit), add management FW version to ethtool report (commit)
uli526x: Add suspend and resume capability (commit)
zd1211rw: monitor all packets (commit), add ID for Sitecom WL-162 (commit), add ID for ZyXEL M-202 XtremeMIMO (commit), add USB id for Telegent TG54USB WLAN adapter (commit), add ID for Talktalk SNU5630NS/05 (commit)
dgrs: remove the driver, since this device never was sold (commit)
4.5. Sound
OSS emulation: add new AFMT_* formats (commit), support 3-bytes 24bit format (commit)
The next round of scheduled OSS code removal (commit)
hda-intel: Add POWER_SAVE option. It's an experimental option to achieve an aggressive power-saving. With this option, the driver will turn on/off the power of each codec and controller chip dynamically on demand. Note that this power-saving might cause slight click-noise at power-on/off. Also, it might take some time to wake up the codec, and might even drop some tones at the very beginning. This seems to be the side-effect of turning off the controller chip (commit)
hda-intel: add hwdep interface (commit), add support for the MCP79 (commit)
hda-codec: Add a generic bind-control helper (commit), add support for the ASRock K8NF6G-VSTA motherboard (commit), add more Dell systems (commit), add support for Acer Aspire laptops (commit), update realtek codec support (commit), add support for Biostar NF61S SE mobo (commit), add ALC268 acer model (commit), add model for MSI m673x (commit), add auto-mute function to Sony VAIO with STAC9872 (commit), add support for Macbook Pro rev3 (commit), add support for Toshiba Satellite P205 (commit), add support for Haier W66 (commit), add SPDIF support on ALC880 fujitsu model (commit), add laptop-automute model for AD1986A (commit), add support for ASUS A7M (commit), add missing model names for ALC882 codecs (commit), add support for Toshiba A305 (commit), add 4 channel support for Realtek ALC883 (commit), add two new systems to ALC883 (commit), add support for analog loopback to STAC9204/9205/922x/927x (commit), add support for Acer Aspire 9303 (commit)
snd-emu10k1: Add support for E-Mu 1616 PCI, 1616M PCI, 0404 PCI, E-Mu (commit), add support for ADAT and S/PDIF. (commit), add support for SPDIF/ADAT status. (commit)
snd-ca0106:Add recognition for new variant. Fixes ALSA bug#3251 (commit)
Add missing models for Dell with STAC9200 (commit) and Stac9205 codecs. (commit)
Add the ESS1879 pnpbios ID to the es18xx driver (commit)
usb-audio: Add advanced mode support for Edirol UA-1EX (commit), add Ozone Academic support (commit), add basic support for E-Mu USB devices. (commit)
bt87x: Add known PCI ID entries (commit)
hdsp: Add support for latset RME9632 revisions (commit)
cmipci: add 96 kHz support (commit)
caiaq: support for Native Instrument's Rigkontrol3 (commit)
Add support for ASUS P701 eeepc (commit)
4.6. ACPI
Battery: Add sysfs support (commit), add sysfs alarm (commit)
SBS: Add sysfs alarm (commit)
AC: Add sysfs interface (commit)
SBS: Split host controller (ACPI0001) from SBS driver (ACPI0002) (commit)
SBS: Add support for power_supply class (and sysfs) (commit)
fujitsu-laptop: create Fujitsu laptop platform specific driver (commit)
thinkpad_acpi: Map volume and brightness events on thinkpads (commit)
4.7. MTD
OneNAND 2X program support (commit)
OneNAND Simulator support (commit)
MAPS: Merge Lubbock and Mainstone drivers into common PXA2xx driver (commit)
Remove Momenco Ocelot NOR flash support (commit)
m25p80 handles more chips, uses JEDEC ids and small eraseblocks (commit)
Add FUJITSU MBM29F800BA and ST M29F800AB descriptions (commit)
Delete the driver for AT26Fxxx dataflash devices (commit)
4.8. Input
usbtouchscreen - add support for Generaltouch devices (commit), add support for IdealTEK URTC1000 (commit), support DMC devices with empty EEPROM (commit), add support for Gotop tablet devices (commit)
Remove ec3104_keyb driver (commit)
ALPS: add support for model found in Dell Vostro 1400 (commit)
lifebook - add signature of Panasonic CF-72 (commit)
gpio-keys - add suspend/resume support (commit)
Add support for HP Jornada onboard keyboard (HP6XX) (commit)
Add support for HP Jornada 7xx onboard keyboard (commit)
Add support for the HP Jornada 7xx (710/720/728) touchscreen (commit)
ALPS: add signature for Thinkpad R61 (commit)
Add support for SEGA Dreamcast keyboard (commit)
Add support for Blackfin BF54x Keypad controller (commit)
4.9. SCSI
Add srp transport class (commit)
srp_transport: add target driver support (commit)
Add supported_mode and active_mode sysfs attributes to the host (commit)
fc_transport: add target driver support (commit)
arcmsr: add SATA RAID plus other fixes (commit)
mpt fusion: Add support for ATTO 4LD: Rebranded LSI 53C1030 (commit)
aic94xx: Add new PCI ID for ASC58300 (commit)
aic7xxx: Add suspend/resume support (commit)
qla2xxx: Add flash burst-read/write support (commit), allow region-based flash-part accesses (commit), add PCI error recovery support (commit)
advansys: Convert to PCI driver model (commit), convert to EISA driver model (commit), convert to ISA driver model (commit)
fc4: remove this and all associated drivers (commit)
ib_srp: convert to use the srp transport class (commit)
tgt: add I_T nexus support (commit)
sym53c8xx: PCI Error Recovery support (commit)
4.10. USB
UEAGLE: Devolo and Elsa chipsets support (commit)
serial/pl2303: support for BenQ Siemens Mobile Phone EF81 (commit)
Export URB statistics for powertop (commit)
Add ohci SSB bus glue (commit)
Add support for SHARP WS011SH to ipaq.c (commit)
4.11. HID
Add support for Microsoft Natural Ergonomic Keyboard 4000 (commit)
Add support for Thrustmaster FGT Force Feedback wheel (commit)
Enable hiddev for the Santarosa Macbookpro IR receiver (commit)
Add support for Microsoft Wireless Laser Keyboard 6000 (commit)
hiddev: Add 32bit ioctl compatibilty (commit)
Add hidraw interface (commit)
4.12. V4L/DVB
V4L: Add internal ioctl-like interface. (commit)
dtt200u: add support for the Miglia TVMini USB DVB-T adapter (commit)
Add remote control support for the Hauppauge Nova-T 500 (commit)
Add support for Compro Videomate 500 with DiB7000PC (commit)
tuner: better tuner radio support (commit)
ivtv: add Avermedia M116 (commit)
cx25840: add radio support. (commit)
saa7134: add DVB-T support for Avermedia Super 007 (commit)
cx23885: Added HVR1250 ATSC support (commit)
Add IR remote support for FusionHDTV 5 RT Gold (commit)
cx23885: add support for DViCO FusionHDTV 5 Express (commit)
Add BT.656 interface support (commit)
Add Typhoon Tv-Tuner PCI to bttv-cards.c (commit)
Add basic support for suspend/resume for saa7134 (commit)
Add support for MSI TV @nywhere A/D NB (commit)
dib0700: add support for Avermedia DVB-T Express card (commit)
4.13. HWMON
applesm: Add support for Mac Pro 2 x Quad-Core (commit)
w83791d: new sysfs beep/alarm methodology (commit)
it87: Add support for fan4 and fan5 (commit)
coretemp: Add support for Celeron 4xx (commit)
4.14. Cpufreq
Allow ondemand and conservative cpufreq governors to be used as default (commit)
Longhaul: Add support for PM133 northbridge (commit)
4.15. I2C
i2c-stub: Support multiple chips (commit)
i2c-i801: Add support for the Intel Tolapai SMBus (commit)
4.16. Bluetooth
Add support for handling simple eSCO links (commit)
4.17. Watchdog
4.18. FireWire
firewire: OHCI 1.0 Isochronous Receive support (commit)
firewire: fw-sbp2: add support for multiple logical units per target (commit)
See also release notes at http://wiki.linux1394.org/ for firewire and ieee1394 changes.
4.19. Various
rtc: RTC class driver for the ds1374 (commit)
Driver for the Atmel on-chip SSC on AT32AP and AT91 (commit)
pcmcia: Compactflash driver for PA Semi Electra boards (commit)
IPMI: add polled interface (commit)
leds: Add Cobalt Raq series LEDs support (commit)
backlight: Add Samsung LTV350QV LCD driver (commit)
Add support for PCMCIA card Sierra Wireless AC850 (commit)
Add support for Wacom WACF007 and WACF008 to serial pnp driver (commit)
I/OAT: Add support for MSI and MSI-X (commit)
I/OAT: Add support for version 2 of ioatdma device (commit)
Remove obsolete lk201 driver (commit)
5. Crashing soon a kernel near you
This is a list of some of the patches being developed right now at the kernel community that will be part of future Linux releases. Those features may take many months to get into the Linus' git tree, or may be completely dropped. You can test the features in the -mm tree, but be warned, it can crash your machine, eat your data (unlikely but not impossible) or kidnap your family (just because it has never happened it doesn't mean it can't happen):
Reading the Linux Weather Forecast page is recommended.
http://lwn.net/Articles/252716/ What's in the realtime tree
- Reiser 4
New memory management for graphic cards