Released 29 November, 2006 (full SCM git log)
- Short overview (for news sites, etc)
- Important things (AKA: ''the cool stuff'')
- Other stuff
Short overview (for news sites, etc)
Linux 2.6.19 includes the clustering GFS2 filesystem (http://sources.redhat.com/cluster/); Ecryptfs (http://lwn.net/Articles/156921) the first experimental version of EXT4 (aimed at developers), support for the Atmel AVR32 architecture, sleepable RCU (http://lwn.net/Articles/202847), improvements for NUMA-based systems, a "-o flush" mount option aimed at FAT-based hotpluggable media devices (mp3), physical CPU hotplug and memory hot-add in x86-64, support for compiling x86 kernels with the GCC stack protection, vectored async I/O (http://lwn.net/Articles/202449), Netlabel subsystem (http://lwn.net/Articles/204905), allow to disable compilation of the block layer, IDE Parallel-ATA drivers based in libata (http://lwn.net/Articles/198344), Granular IPSec associations for use in MLS environments, add the Netlabel subsystem (http://lwn.net/Articles/204905), Mobile IPv6 (RFC 3775), some new drivers, improved support for many already existing drivers, and many other things.
Important things (AKA: ''the cool stuff'')
GFS2 is a clustering filesystem developed mainly by Red Hat (after purchasing Sistina and opening the source code, since it was closed at Sistina). It's not the first: OCFS2, another clustering filesystem developed by Oracle, was already merged in Linux 2.6.16. Clustering filesystems allow to share a filesystem between several machines with no compromises. GFS includes his own DLM (distributed locking manager) and a userspace API interface for that DLM.
Like OCFS2 and like any other filesystem that wants to be merged in the linux kernel, GFS2 developers asked for submission long time ago. They were asked to fix things (even considering that GFS2 had already been developed at Sistina and it was already a stable final product), they submitted it again, they were asked to fix more things, and so on, for a long period of time. Their developers have fixed every thing they were asked to fix. Because of their hard work, GFS2 is now ready to be merged, nobody opposes to it, and everyone is happy. (Amazing, isn't it? In fact, 3 new filesystems are being merged in 2.6.19 and nobody is flaming nobody, quite the contrary)
EXT 4 is an evolution (not a redesign from zero) of EXT3. EXT3 never was, and never intended to be, a "state-of-the-art" filesystem (being fair, it was just about adding a journal to ext2 + some features like htree) but rather a solid, reliable filesystem. EXT3 has been quite successful, and despite of the age of its design it works surprisingly quite well in a wide variety of workloads from modern desktops to some big iron SMPs (even if it's not "the best" in some of those workloads). EXT4 is a development and experimental feature. EXT4 will incorporate scalability and reliability enhancements for supporting large filesystems (64 bit) in keeping with increasing disk capacities and some of the "state-of-the-art" feature requirements. But the version in 2.6.19 is missing lots of the features that are already developed but not merged, so it's not useful even for benchmarking. From the Section 2 of the Documentation file:
Features currently available: ability to use filesystems > 16TB, extent format reduces metadata overhead (RAM, IO for access, transactions), extent format more robust in face of on-disk corruption due to magics, internal redundancy in tree
Candidate features for future inclusion: There are several under discussion, whether they all make it in is partly a function of how much time everyone has to work on them: improved file allocation (multi-block alloc, delayed alloc; basically done), fix 32000 subdirectory limit (patch exists, needs some e2fsck work), nsec timestamps for mtime, atime, ctime, create time (patch exists, needs some e2fsck work), inode version field on disk (NFSv4, Lustre; prototype exists), reduced mke2fs/e2fsck time via uninitialized groups (prototype exists), journal checksumming for robustness, performance (prototype exists), persistent file preallocation (e.g for streaming media, databases).
Features like metadata checksumming have been discussed and planned for a bit but no patches exist yet so I'm not sure they're in the near-term roadmap. The big performance win will come with mballoc and delalloc. CFS has been using mballoc for a few years already with Lustre, and IBM + Bull did a lot of benchmarking on it. The reason it isn't in the first set of patches is partly a manageability issue, and partly because it doesn't directly affect the on-disk format (outside of much better allocation) so it isn't critical to get into the first round of changes
Coming from IBM, ecryptfs aims to bring "enterprise level" file encryption to the masses.
"Oh no, another filesystem!". No, Ecryptfs is not a traditional filesystem: it doesn't implement his own disk format for example. From this LWN article:
The eCryptfs developers took the stacking approach, meaning that, rather than implement its own platter-level format, eCryptfs sits on top of another filesystem. It is, essentially, a sort of translation layer which makes encrypted file capabilities available. The system administrator can thus create encrypted filesystems on top of whatever filesystem is in use locally, or even over a network-mounted filesystem. [...] Rather than encrypt the filesystem as a whole, eCryptfs deals with each file individually
Is it better to encrypt the whole disk using cryptoloop/dmcrypt, or use ecryptfs? You decide. Ecryptfs avoids the overhead of a fully encrypted filesystem by only encrypting the files you really want to encrypt, and it also allows to encrypt different files in different ways. Ecryptfs tries to make file encryption available in an easy way for the masses. It "aims to combine the flexibility of GnuPG encryption with the transparency of a kernel service" [...] "Think of eCryptfs as a sort of 'gnupgfs'". If you're interested, you will find the userspace tools and more information available in the ecryptfs sourceforge site. You can also read the Ecryptfs documentation and the Ecryptfs code (232 KB).
Libata PATA (Parallel ATA) merge
By "Parallel ATA" we mean all the ATA/IDE controllers and drives that we have been using for years before SATA. Almost from the start, one of the objectives of some kernel hackers was to replace the IDE drivers available in drivers/ide (everything under the "Device drivers -> ATA/ATAPI/MFM/RLL support" configuration menu) with a reimplementation on top of libata (i.e.: the "SATA layer"). Drivers/ide suffers from many ugly and obscure problems, and re-implementing it on top of libata has been much easier than fixing the unfixable drivers/ide mess - most of the porting work has been done by Alan Cox (a consequence of this PATA merge is that libata and all its SATA drivers have also been moved from drivers/scsi (available in the "Device drivers -> SCSI device support -> SCSI low-level drivers" submenu) to drivers/ata (now "Device drivers -> Serial ATA (prod) and Parallel ATA (experimental) drivers"), and all the CONFIG_SCSI_FOOBAR options for the individual SATA drivers have been changed to CONFIG_FOOBAR, so this means you may need to reconfigure your SATA configuration options)
This means 2.6.19 may have two drivers for your PATA-based device: The old IDE driver under "Device drivers -> ATA/ATAPI/MFM/RLL support" and an alternative driver under "Device drivers -> Serial ATA (prod) and Parallel ATA (experimental) drivers" (along with the rest of the SATA drivers)
What one must you choose? Well, the safe option is using the old driver: The old drivers will continue working just as they did before. There'll be no changes if you continue using the old drivers.
What do the new libata-based PATA drivers offer to you?
- First of all, because they're libata-based and libata is a well engineered and sane infrastructure, the drivers have much better quality, they're cleaner, they've much better error handling (much better behaviour when one of your drives dies suddenly or finds broken sectors), and they don't have some of the known design issues that the old drivers have (this is why people did all the work to move away from drivers/ide, they didn't do it just for fun)
- Because they're newer, there are more bugs. For this release, they're "experimental". If you want to be safe, use the old drivers.
- Really. There is a risk that the new drivers won't work for you, or may harm your data (unlikely, but not impossible). If you want to be safe, use the old drivers.
- They support some chipsets not supported by drivers/ide. The cleaner design of libata allows for easier driver development and maintenance. In some cases it supports features that the old driver doesn't, for the same reasons.
- Some IDE controllers are not supported or they aren't fully supported. Some of them because not all the IDE drivers have been ported to libata, but others because they're old and undocumented or because the libata PATA layer still doesn't support some of their features. There's no support for certain old serialized devices, for prehistoric CMD640 controllers or for host-protected-area yet.
- Drives appear as /dev/sda, /dev/sr0, the old devices names won't work. You will need to change your boot parameters and your /etc/fstab parameters in order to get a working system with the new drivers. Again, this only happens if you use the new drivers, the old drivers continue working as they did before.
Eventually, the new libata-based PATA drivers will get more stable, so the old drivers in drivers/ide may get deleted as the new drivers fulfill all needs of the IDE users and become feature-complete. But this certainly won't happen anytime soon. No old drivers will be deleted if there's not a working libata-based replacement. You can read the latest status report written by Alan Cox. It'd certainly be useful if you could give it a try and report back how well it works to firstname.lastname@example.org or bugzilla.kernel.org - even if it works fine, it'll be useful to know what systems do work (be sure to include the necessary information mentioned in the previous status report). (libata PATA code)
It is probably worth reiterating that if you have SATA drives, and you do a make oldconfig from a 2.6.18 or previous kernel, your system will not boot unless you specifically go in and enable the new SATA subsystem, and the driver for your controller.
Removal of selected OSS drivers
Since 2.6 was released, ALSA has been the "official" sound subsystem. OSS drivers were kept for compatibility - ALSA also implements an OSS compatibility layer. However, there's a big number of ALSA drivers and OSS drivers targeting exactly the same hardware. Usually, the OSS ones are undermaintained (or not maintained at all). And ALSA already implements OSS compatibility. So....
...it's possible to remove old OSS drivers, as long as there's an equivalent ALSA driver, and as long as that driver has no regressions that don't allow users to migrate (drivers with no ALSA equivalent or with known regressions have NOT been deleted). In 2.6.19, those OSS drivers are being removed. If when migrating users find something wrong in the ALSA drivers, they should report it in the ALSA bug tracking system and work with developers to fix them. Yes, we know there're users that feel just fine with the OSS drivers, but it doesn't help to the kernel to keep those old drivers around. By forcing people to migrate to ALSA drivers, the ALSA drivers will be improved and fixed. Overall, the linux sound subsystem will only get better. Many thanks to all the hackers that coded them.
A total of 1.79 MB of OSS drivers will be removed. To see a list of source files being removed, see the commit link. Hardware that is forced to use ALSA drivers include:
AD1980 AC97 plugin; ALI 5455; Alchemy Au1000 (MIPS); AWE32/SB32/AWE64 Wavetable driver; C-Media; Cirrus Logic-Crystal CS4281; Ensoniq ES1370/Asahi Kasei AK4531; ESS Technology Solo1 (ES1946); Fortemedia FM801; Gravis Ultrasound; ASP's and Lasi's Harmony sound chip; ICS2101 mixer of GUS v3.7; OPTi MAD16 compatible audio chips; ESS Maestro/Maestro-2/Maestro-2E/Maestro3/Allegro; Turtle Beach Maui and Tropez; Yamaha YMF701B aka OPL3-SA; RME9652/36 "Hammerfall" Driver; Aztech Sound Galaxy cards; S3 Sonic Vibes; Turtle Beach Wavefront Series (Maui, Tropez, Tropez Plus); Wavefront ICS2115 MIDI; Yamaha YMF7xx
2.6.19 adds support for the Atmel AVR32 architecture, implemented and supported by Atmel Corporation.
AVR32 is a new high-performance 32-bit RISC microprocessor core, designed for cost-sensitive embedded applications, with particular emphasis on low power consumption and high code density. The AVR32 architecture description, including the instruction set, can be found in the AVR32 Architecture Manual. The Atmel AT32AP7000 is the first CPU implementing the AVR32 architecture; it features a 7-stage pipeline, 16KB instruction and data caches and a full Memory Management Unit and a large set of integrated peripherals (full data sheet); while the CPU core implementation including caches and MMU is documented by the AVR32 AP Technical Reference. Information about the AT32STK1000 development board can be found here, including a BSP CD image, development tools (binaries and source/patches) and a root filesystem image suitable for booting from SD card. Alternatively, there's a preliminary "getting started" guide available at http://avr32linux.org/twiki/bin/view/Main/GettingStarted which provides links to the sources and patches you will need in order to set up a cross-compiling environment for avr32-linux
Source code can be found here (arch/av32)
Sleepable RCU (Read Copy Update)
Like in spinlocks, preemptable RCU read-side critical sections were prohibited. However, many people had frequently requested a "sleepable RCU". Furthermore, the realtime capabilities being developed in the -rt patch required that those critical sections were preemptible. So a RCU variant permitting read-side blocking has been developed, and a SRCU-base notifier chain has also been merged (commit), (commit)
Configurable block layer
2.6.19 makes it possible to disable the block layer. Not all embedded devices require it, some can make do with just JFFS2, NFS, ramfs, etc - none of which require the block layer to be present (commit 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
Tracking maximum allowable latency for power saving
2.6.19 adds an infrastructure to track "maximum allowable latency" for power saving policies (LWN article). The reason for adding this infrastructure is that power management in the idle loop needs to make a tradeoff between latency and power savings (deeper power save modes have a longer latency to running code again). The code that today makes this tradeoff just does a rather simple algorithm; however this is not good enough: There are devices and use cases where a lower latency is required than that the higher power saving states provide. An example would be audio playback, but another example is the ipw2100 wireless driver that right now has a very direct and ugly acpi hook to disable some higher power states randomly when it gets certain types of error. The proposed solution is to have an interface where drivers can 1) announce the maximum latency (in microseconds) that they can deal with 2) modify this latency 3) give up their constraint (commit), (commit)
Some new drivers
Here are some important drivers that have been added to the Linux tree - note that it says 'drivers', only new important drivers are listed today. Other small drivers are listed below; the already available drivers also add support for new devices and some are listed below but support for new devices is added so fast that it's impossible to keep track of all of them.
qla3xxx networking driver (commit)
IBM eHEA Ethernet driver (commit)
Cirrus Logic ep93xx ethernet driver (commit)
Aic94xx SCSI driver driver (commit)
arcmsr SCSI driver for the Areca Raid controller (commit)
Add Promise Supertrak SCSI driver, supporting Supertrak EX8350/8300/16350/16300 controllers (commit)
qla4xxx, an open-iSCSI driver for Qlogic Corporation's iSCSI HBAs (commit)
Arch-independent changes in the kernel core
- Memory management
Allow the removal of ZONE_DMA32 for non x86_64 architectures and ZONE_HIGHMEM for arches not using highmem (like 64 bit architectures). While they're not used on those arches, they eat some memory and they've no sense on those platforms anyway, so make it possible to disable them at compile time (commit), (commit), (commit)
dynamic slab reclaim: currently slab reclaim is enabled by setting an explicit option in /proc/sys/vm/zone_reclaim_mode and it's used as a final option if the freeing of unmapped file backed pages is not enough to free enough pages to allow a local allocation. However, that means that the slab can grow excessively and that most memory of a node may be used by slabs. This implements slab reclaim during zone reclaim (zone reclaim occurs if there is a danger of an off node allocation) (commit)
Add a new gfp flag GFP_THISNODE to avoid fallback to other nodes. This flag is essential if a kernel component requires memory to be located on a certain node (commit), (commit), and use it in sys_move_pages() for not allowing fallbacks to another nodes (commit) and in the profiling code (commit)
Introduce an architecture-independent mechanism for registering active regions of memory. The big benefit of this set of patches is a sizable reduction of architecture-specific code, some of which is very hairy. In this release x86, x86-64, ia64 and power platforms are ported to use this generic code (commit), (commit), (commit), (commit), (commit), (commit), (commit), (commit), (commit)
Directed yield: cpu_relax variants for spinlocks and rw-locks. On systems running with virtual cpus there is optimization potential in regard to spinlocks and rw-locks. If the virtual cpu that has taken a lock is known to a cpu that wants to acquire the same lock it is beneficial to yield the timeslice of the virtual cpu in favour of the cpu that has the lock (directed yield) (commit), (commit), (commit)
Allow file systems to differentiate between data and meta reads, so that the kernel can use this information for making more intelligent priority decisions and for blktrace (commit), (commit), (commit), (commit)
Sofware suspend updates: Add a swsusp debugging mode (commit), add write-speed instrumentation (commit) and read-speed instrumentation to see what bandwidth we're achieving (commit); implement async read for faster swsusp resuming (commit), switch the swsusp writeout code from 4k-at-a-time to 4MB-at-a-time for faster suspending (commit); introduce memory bitmaps for more efficient memory usage (commit), (commit), suspend infrastructure cleanup and extension (commit)
IRQ handling infrastructure: Maintain a per-CPU global "struct pt_regs *" variable instead of passing regs around manually through all ~1800 interrupt handlers in the Linux kernel (LWN article) (commit)
- Other stuff
Add the pm_trace attribute in /sys/power which has to be explicitly set to one to really enable the "PM tracing" code compiled in when CONFIG_PM_TRACE is set (which modifies the machine's CMOS clock in unpredictable ways) (commit)
Make it possible to disable console suspending (CONFIG_DISABLE_CONSOLE_SUSPEND) (commit)
Driver core: create devices/virtual/ tree (commit)
Single bit flip detector. In cases where we detect a single bit has been flipped, we spew the usual slab corruption message, which users instantly think is a kernel bug. In a lot of cases, single bit errors are down to bad memory, or other hardware failure, so suggest users to run memtest86 (commit)
lockdep: core, add enable/disable_irq_irqsave/irqrestore() APIs (commit)
Generic boolean. The kernel hackers have finally surrendered to it. $DEITY help us! (commit)
EISA bus MODALIAS attributes support (commit)
Support piping into commands in /proc/sys/kernel/core_pattern (commit)
Linux Kernel Dump Test Module, a simple module to test Linux Kernel Dump mechanism that allows users to crash their kernel in different ways. Linux is getting so good, we need a kernel module to remember the old days (commit)
kconfig/menuconfig: lxdialog is now built-in: lxdialog was previously called as an external program causing screen to flicker when used. With this patch lxdialog is now built-in (commit), add support for color themes and add blackbg theme (commit), add a new theme bluetitle which is now default (commit), support resize http://kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c8dc68ad0fbd934e78e913b8a8d7b45945db4930
Implement the epoll_pwait system call, that extends the event wait mechanism with the same logic ppoll and pselect do. The definition of epoll_pwait is: int epoll_pwait(int epfd, struct epoll_event *events, int maxevents, int timeout, const sigset_t *sigmask, size_t sigsetsize); (commit)
Add a dynamic irq creation API. With the msi support comes a new concept in irq handling, irqs that are created dynamically at run time. To solve the basic dynamic irq allocation problem two new architecture specific functions are added: create_irq and destroy_irq (commit), (commit), (commit), (commit)
dm: add target preresume (commit), scheduled removal of the START_ARRAY ioctl for md (commit), support ioctls in md linear (commit), support ioctls in dm mpath (commit), add uevent change event on resume (commit), add key msg (commit), new sysfs interface for setting bits in the write-intent-bitmap (commit) (commit)], support ioctls on mapped devices (commit)
kdump: introduce "reset_devices" command line option. This option can be used by drivers to know that user forcibly wants the devices to be reset during initialization (commit)
NTP: Convert to the NTP4 reference model (commit)
Create a call_usermodehelper_pipe() function that allows to pipe data to the stdin of the called user mode program (commit)
32-bit compatibility HDIO IOCTLs (commit)
introduce kernel_execve, the use of execve() in the kernel is dubious, since it relies on the KERNEL_SYSCALLS mechanism that stores the result in a global errno variable (commit), (commit), (commit), (commit), (commit), (commit)
schedule removal of FUTEX_FD (commit)
- x86 32/64
Non lazy "sleazy" fpu implementation. Right now the kernel on x86-64 has a 100% lazy fpu behavior: after *every* context switch a trap is taken for the first FPU use to restore the FPU context lazily. This is great for applications that have very sporadic or no FPU use (since then you avoid doing the expensive save/restore all the time). However for very frequent FPU users... you take an extra trap every context switch. So 2.6.19 adds a simple heuristic to this code: After 5 consecutive context switches of FPU use, the lazy behavior is disabled and the context gets restored every context switch. If the app indeed uses the FPU, the trap is avoided (the chance of the 6th time slice using FPU after the previous 5 having done so are quite high obviously). After 256 switches, this is reset and lazy behavior is returned (until there are 5 consecutive ones again) (commit)
x86 microcode: add sysfs and hotplug support (commit)
NMI: enable NMI watchdog by default for systems newer than 2004 (commit), add ability to enable/disable nmi watchdog with sysctl/procfs (commit), (commit), allow users to force a panic on NMI (commit)
Add the vgetcpu vsyscall: This patch adds a vgetcpu vsyscall, which depending on the CPU RDTSCP capability uses either the RDTSCP or CPUID to obtain a CPU and node numbers and pass them to the program (commit)
Add portable getcpu call (commit), convert i386 NUMA KVA space to bootmem (commit), enable VMSPLIT for highmem kernels (commit), add a bootparameter to reserve high linear address space (commit), allow disabling early pci scans with pci=noearly or disallowing conf1 (commit)
Big SH update: prefetch()/prefetchw() support (commit), optimized cache handling for SH-4/SH-4A caches (commit), math-emu support (commit), implement pselect6 and ppoll (commit), stack debugging support (commit), APM/PM support (commit), enable /proc/kcore support (commit), support for 4K stacks (commit) and vsyscall page support (commit)
Add support for SH7770 and SH7780 SH-4A subtypes (commit), titan board support (commit), add support for R7780RP and R7780MP boards (commit), SH-4A Privileged Space Mapping Buffer (PMB) support (commit), sandisk board support (commit), add support for SH7706/SH7710/SH7343 CPUs (commit), voyagerGX 8250 UART support (commit), SH7710VoIPGW board support (commit), solution Engine SH7343 board support (commit) and SHMIN board support (commit).
PA Semi PWRficient platform support (commit),
Enable XMON on PPC 4xx boards (commit)
Cpufreq support for Xserve G5 (commit)
Emulate power5 popcntb instruction on non-power5 machines (commit)
A new iSeries console (commit)
Add MPC8360EMDS board support (commit), add initial support for the Freescale e300c2 core found in the MPC832x processor line (commit), add support for the mpc832x mds board (commit), add support for the mpc8560 eval board (commit)
Add kprobes support (commit)
Kernel stack overflow handling (commit)
Linux API for writing z/VM APPLDATA Monitor records collected by the *MONITOR System Service of z/VM (commit)
SPARC: Add sparc 32 bit profiling support (commit)
ARM: Add irqtrace support (commit), add support for: thecus n2100 (commit), AML M5900 series (commit), IO-Data GLAN Tank (commit), ARM9TDMI core (commit), Apollon MMC (commit), Locomo SPI Device (commit), ARM740T core (commit), power management for AML M5900 series (commit), ARM940T core (commit), OMAP2 dmtimer power management (commit), ARM7TDMI core (commit), ARM946E-S core support (commit)
FAT: Add "-o flush" mount option for fat for removable media devices (USB flash-based memory devices, MP3 players). Mounting with -o flush tells FAT to write things to disk as quickly as possible. It is like -o sync, but much faster (and not as safe). Think of it like a fast "async" mount (commit)
JFS: Add splice support (commit)
NFS: support of rsize/wsize of up to 1MB, over TCP (the limit over UDP remains at 32K) (commit), add server and volume lists to /proc (commit), allow admin to set nthreads per node in /proc/fs/nfsd/pool_threads (commit), make rpc threads pools numa aware (commit)
Granular IPSec associations for use in MLS environments. The current approach to labeling Security Associations for SELinux purposes uses a one-to-one mapping between xfrm policy rules and security associations. This doesn't address the needs of real world MLS (Multi-level System, traditional Bell-Lapadula) environments where a single xfrm policy rule (pertaining to a range, classified to secret for example) might need to map to multiple Security Associations (one each for classified, secret, top secret and all the compartments applicable to these security levels). 2.6.19 fixes the above problem by allowing for the mapping of a single xfrm policy rule to multiple security associations, with each association used in the security context it is defined for. It also includes the security context to be used in IKE negotiation in the acquire messages sent to the IKE daemon so that a unique SA can be negotiated for each unique security context (commit), (commit), (commit), (commit), (commit), (commit), (commit), (commit), (commit), (commit), (commit)
Support mls categories for context mounts. This allows commas to be embedded into context mount options (i.e. "-o context=some_selinux_context_t"), to better support multiple categories, which are separated by commas and confuse mount (commit)
Introduces support for policy version 21. This version of the binary kernel policy allows for defining range transitions on security classes other than the process security class. As always, backwards compatibility for older formats is retained. The security class is read in as specified when using the new format, while the "process" security class is assumed when using an older policy format (commit)
Enable configuration of SELinux maximum supported policy version to support legacy userland (init) that does not gracefully handle kernels that support newer policy versions two or more beyond the installed policy, as in FC3 and FC4 (commit)
Linux does support pluggable and runtime switchable TCP congestion algorithms since 2.6.13. 2.6.19 changes the default congestion algorithm from BIC-TCP to CUBIC, which should have better properties over long links (commit)
Add a new kernel subsystem, Netlabel (LWN article), Project site to provide explicit packet labeling services (CIPSO, RIPSO, etc.) to LSM developers. Netlabel is designed to work in conjunction with a LSM to intercept and decode security labels on incoming network packets as well as ensure that outgoing network packets are labeled according to the security mechanism employed by the LSM (commit 1, 2, 3, 4, 5, 6, 7, 8)
SCTP: Enable Nagle algorithm by default (commit)
DCCP: Introduce tx buffering (commit)
Replace CHECKSUM_HW by CHECKSUM_PARTIAL (commit)
Extend netlink messaging interface (commit)
In-kernel sockets API for in-kernel users like sunrpc, cifs & ocfs2 etc and any future users (commit)
Add or/and/xor action support to mark target (commit)
Add cryptomgr, a "cryptographic algorithm manager" (commit)
Add block cipher type. Unlike current cipher algorithms which operate on a single block at a time, block ciphers operate on an arbitrarily long linear area of data. As it is block-based, it will skip any data remaining at the end which cannot form a block (commit), (commit). Also switch some cipher users to use block type (commit 1, 2, 3, 4, 5, 6, 7, 8)
Add powersave_bias tunable. ondemand selects the minimum frequency that can retire a workload with negligible idle time -- ideally resulting in the highest performance/power efficiency with negligible performance impact (commit)
Drivers and other subsystems
Add support for the SiS 315 to the DRM (commit), add option to enable/disable the cursor in au1100fb (commit), for Intel i965G chipsets (commit), allow detection of new VIA chipsets (commit), add support to Intel 965 Express (commit), a suspend callback for i965 (commit); and vsync interrupt and i2c support for intelfb (commit 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
Add Playstation 2 Trance Vibrator driver (commit), add driver for the Phidgets Inc Motorcontrol (commit), add AIRcable USB Bluetooth Dongle Driver (commit), add Moschip 7840 USB-Serial Driver (commit), add basic infrastructure in usbcore for autosuspend/autoresume (commit), new gmidi, a MIDI Gadget class driver - glue between the USB gadget interface and the ALSA MIDI interface (commit), add TIOCGSERIAL and TIOCSSERIAL ioctl calls to ark3116 (commit), add AX88178 support to asix (commit), add support for many devices in the usbtouchscreen driver (commit), add ADU support for Ontrak ADU devices (commit), add rio karma eject support (commit), client driver for ELAN Uxxx adapters in ftdi-elan (commit), add serial mos7720 driver (commit)
Implement a new Force Feedback interface for drivers (userspace interface is untouched) (commit), (commit), (commit), (commit), (commit), (commit), (commit); add driver for Touchwin serial touchscreens (commit), another for Penmount serial touchscreens (commit), another for Touchright serial touchscreens (commit), another driver for stowaway serial keyboards (commit); and add support for non-pressure-sensitive touchscreens in elo driver (commit), add support for Acer Travelmate 2424NWXCi in wistron driver (commit), and add support Microsoft Natural Elite Pro keyboards (commit)
HDA MSI support (commit); add model entry for Samsung X10 laptop (commit), for Clevo m665n laptop (commit), support sigmatel 9205 family (commit), add model for ASUS M2NPV-VM mobo (commit), add support of Benq laptop with ALC262 (commit), add support for Sony Vaio AR 11B (commit), add hp-bpc model type for HP laptops (commit), add model for Uniwill laptop with ALC861 (commit), add support for LG LW25 laptop (commit), support for Sigmatel 9872 (commit), add 5 stack audio support for Intel 965 systems (commit), new pci id for Nvidia MCP61 (commit), add model entry for ASUS U5F laptop: Added a model entry for ASUS U5F laptop with AD1986A codec (commit), add ATI RS690 HDMI audio support (commit),
Add snd-mts64 driver for ESI Miditerminal 4140 (commit), and add experimental support of aggressive AC97 power-saving mode (CONFIG_SND_AC97_POWER_SAVE)- it can be turned on/off on the fly via sysfs, too (commit)
Besides the libata/PATA changes already mentioned above, there're more changes in libata and in the old IDE subsystem: Increase lba48 max-sectors from 200 to 256 (commit), add support for SATA attachment to SAS adapters (commit), implement Power Management support in ahci (commit), add SATA support for vt8237a in sata_via (commit), add Compactflash support (commit), Intel ICH9 AHCI (commit)
V4l2 driver conversion: radio_aimslab (commit), radio_gemtek-pci (commit), radio-rtrack2 (commit), radio_gemtek (commit), radio-typhoon (commit), radio_aztech (commit), radio-sf16fmi (commit), radio-maestro (commit), radio-terratec (commit), radio-sf16fmr2 (commit), radio-trust (commit), radio-maxiradio (commit), radio-zoltrix (commit), radio-cadet (commit), saa5246a, saa5249, vino, hexium_orion, hexium_gemini (commit)
Multi-input patch for DVB-USB device (commit)
Add WinTV-HVR3000 DVB-T support (commit), add support for the md8800 quadro board (commit), add PCI ID for Avermedia DVB-T 777 with SAA7133 (commit), added PCI ID of the Genius Videowonder Dual Cardbus (commit), add support for Shenzhen Tungsten Ages Tech TE-DTV-250 OEM for Swann PCI TV Tuner Card (commit), add support for Norwood PCI TV Tuner (non-pro) (commit), add initial support for Hauppauge HVR3000 trimode card (commit), add drivers for tda10086 + tda826x chips (commit), add support for Acorp TV134DS + FlyDVB-S cards (commit), add autodetection support for Avermedia M150-D (commit), add dvb-pll support for MT352/ZL10353 based tuners (commit), add tda10086 support for TT DVB-S-1401 (commit), add support for PAL-Nc in cx24850 (commit), add support for dibcom mod3000p + mt2060 remote control (commit), add support Grundig DVB-T tuner for sub-system 13c2:0001 (commit), add support for Leadtek DVB-T USB clone (commit), add support for the Artec T14 (commit), add support for the Club 3D zap250mini USB dvb device (commit), add support for saa7111 and partial support for saa7118 (commit), add driver for TUA6100 (commit), add support for MT2060 and thus for some DVB-USB-devices based on it (commit), add Compro PS39U USB ID to Vicam driver (commit), add basic DVB-T and analog TV support for the HVR1300 (commit), add Nebula DigiTV USB RC support (commit), add card support for Proteus Pro 2309 (commit), add support for DViCO FusionHDTV DVB-T Dual Digital 2 (commit), add support for Hauppauge Nova-T 500 (commit), add module for Dib0700 based devices (commit), add support for the ASUS EUROPA2 OEM board (commit)
Improved statistics for bcm43xx (commit), WE-19 capabilities for prism54 (commit), AL7230B RF support, implement SIOCGIWNICKN and add LED support for zd1211rw (commit), (commit), (commit), basic MII ioctl support and hardware flow control for r8169 (commit), (commit), enable wireless extension passive scan for ipw2200 (commit), add ethtool -S support for spidernet (commit), NAPI implementation for pcnet32 and forcedeth (commit), (commit); and delete GT96100 driver - hasn't even compiled for years (commit), let non-admin users to query network statistics and settings (commit), add 5709 self-test support, basic 5906 support and support for the 5709 10/100 PHY in TG3 (commit), (commit), (commit); add multicast stats counters to e1000 (commit)
WE-21 support (commit) and support for hostap (commit), atmel (commit), ipw2100 (commit), prism54 (commit), orinoco (commit), airo (commit), wl3501 (commit), zd1211rw (commit), bcm43xx (commit), ray_cs (commit), ipw2200 (commit), zd1201 (commit)
SCSI and FC Transport: add netlink support for posting of transport events (commit)
qla2xxx: Add support for fabric name FC transport attribute (commit), add support for system hostname FC transport attribute (commit), add support for host port state FC transport attribute (commit), add support for symbolic nodename FC transport attribute (commit), add iIDMA (Intelligent Interleaved Direct Memory Access) (commit)
Hardware monitoring drivers
Add support for the temperature sensor(s) found in AMD K8 CPUs (commit), add fan speed control features to w83627ehf (commit), new driver for the VIA VT1211 Super-IO chip (commit), add individual alarm files to f71805f, lm63, lm83 and lm90 (commit)
MTD: add power management support to physmap (commit), remove iq80310 map driver (commit). add SSFDC (Smartmedia) read-only translation layer (commit), MTD driver for AVR32 (commit), add AT49BV6416 platform device for ATSTK1000 (commit)
RDMA: iWARP Connection Manager (commit), add a driver for the Ammasso 1100 gigabit ethernet RNIC (commit), add driver for IBM eHCA Infiniband adapters (commit), performance improvements via mmap of queues (commit), support revision 2 Infinipath PCIE devices (commit), support new PCIE device, QLE7142 (commit), driver support for userspace sharing of HW contexts (commit)
rtc: New RTC driver for SuperH On-Chip RTC (commit)
atiixp: ATI SB600 IDE support for various modes (commit)
hdaps: support Lenovo Thinkpad T60 (commit)
cciss: support for >2TB logical volumes (commit)
synclink_gt: add bisync and monosync modes (commit)
i2c: New bus driver for TI OMAP boards (commit)
i2c-viapro: Add support for the VT8237A and VT8251 (commit)
Remove old drivers/char/s3c2410_rtc.c, since there is now a drivers/rtc/rtc-s3c.c driver (commit)
IPMI: per-channel command registration (commit)