|Driver changes galore
Among the innumerable changes in Linux 2.6.28 are a great number of patches to the many drivers contained in the Linux sources. These patches improve hardware support, increase the range of features offered, or simply correct mistakes. The paragraphs on this and the previous pages, only mention the most important of these driver improvements; many further changes are listed, roughly sorted by topic with short descriptions, in two collections at the end of this article ([pagelink indepth-arch]1[/pagelink], [pagelink indepth-acpi]2[/pagelink]). The listed changes contain links to the respective commit in the web interface of the Linux source code management system, where you can usually find both more background information about the change and the patch itself.
Architectures and virtualisation
With the include files for ARM, IA64, Power and Sparc having migrated from include/xyz to arch/xyz/include in Linux 2.6.27, the files for a number of other architectures, including MIPS and x86, are now following suit in 2.6.28. The kernel development team have also overhauled APIC support for x86 systems in various places and extended it to include support for x2apic (including 1, 2, 3, 4). One new feature is support for the XSAVE and XRSTOR commands, supported by newer Intel processors, which save or restore the state of x87 and SSE registers during context switches. Following a redesign, apparently driven by AMD, Microcode Loader, which previously only allowed Intel CPU microcode to be updated, now supports newer AMD processors (e.g. 1, 2, 3). There have also been a number of fundamental changes relating to performance and code debugging, including kernel tracepoints (documentation, examples) and the unified trace buffer. The kernel development team have removed irqbalance – in most distributions the eponymous userspace demon has, for several years, been performing this task.
2.6.28 also includes a number of new features for virtualisation solutions. Under the KVM virtualisation solution it is now possible to pass PCI devices through to guests, with the help of Intel's VT-D (e.g. 1, 2, 3). Improvements have also been made that should allow operating systems running as KVM guests to start up around 15 per cent faster. The kernel now offers a Container Freezer for container-based visualisation, which allows a container to be frozen completely (documentation, LWN.net-Artikel), allowing, for example, a low priority cluster job to be temporarily suspended. The kernel code for operating as a Xen guest system (DomU) now also allows CPU hotplugging. Xen DomU and IOMMU support for Intel's Itanium (IA64) has also been added. The Xen code to run a primary Xen domain (Dom0) has, as expected, not made it into 2.6.28.
This Kernel Log mentions some of the most important changes in drivers, but there are many other significant changes. There are a number of new drivers for the ASoC (ALSA System on Chip) framework used particularly in embedded systems – for example drivers for the WM8903, WM8580, WM8900 and WM8971 codecs by Wolfson Microelectronics. Apart from Jaroslav Kysela, who has been working for Red Hat for several months now, the kernel sources now also officially list Alsa developer and Suse employee Takashi Iwai, as an audio driver maintainer.
During configuration, it is now possible to select which of the gspca subdrivers will be compiled – later. There's new support for the cx24116, si21xx, and stv0288 DVB-S2 chips; the cx88 and dw2102 drivers were improved to include DVB-S2 support.
Also new are the network drivers for enic ((10 GBit-NICs from Cisco), jme (Gigabit-NICs from JMicron), qlge (10GBit-NICs from Qlogic) and smsc95xx (USB 2.0 10/100 MBit-Adapter using the SMSC LAN9500). New too, are the fsl_qe_udc driver for the Freescale QE/CPM USB device controller and a USB test and measurement class driver for devices that comply with the USB.org specification for "USB Test and Measurement devices".
Many more less important, but useful, changes can be found in the appendix of this article, covering the various DVB cards and adapters which Linux 2.6.28 can now deal with.
At the Kernel Summit in September, kernel hackers accepted the "linux-staging" development tree into the main development tree (1, 2) (Kernel-Summit). Greg Kroah-Hartman started linux-staging a few months ago as a place to bring together open source drivers that are maintained independently of the official Linux kernel and do not satisfy the kernel developers' quality requirements. The aim of linux-staging is to offer developers a central platform on which to prepare the drivers for acceptance into the official linux kernel.
Now the kernel developers want to accelerate the improvement of these drivers, which have some serious problems in their code or in their design, within the main development tree. The idea is that the kernel hackers will have the code for these drivers easily available to them and will be able to contribute improvements over their normal channels. In order to separate mature from immature drivers, the code brought in from linux-staging has been assigned to a new driver/staging/ folder.
There is a problem, though: how to make users and developers aware that there are staging drivers present. To handle this, when a staging driver is loaded, the kernel is marked as "TAINT_CRAP", so that when bug reports come in from users, it is clearly visible that a "dodgy" driver was loaded and may have been, at least partly, responsible for any problems (1, 2).
Of the twelve staging drivers now accepted into the main development tree, some are well-known ones that linux distributions have been delivering for years, such as the prism2_usb driver developed by the WLAN NG Project and the at76_usb driver for wireless chips, by Atmel. We'll have to see whether this acceptance into the staging area of the official kernel will now stimulate more kernel hackers than before to feel a call to improve the drivers. Where the old, complex wireless driver is concerned, writing a new driver starting from scratch might possibly be the better approach.