Kernel Log: Coming in 3.9 (Part 3)
Drivers and networking
by Thorsten Leemhuis
Linux 3.9 includes drivers for new AMD graphics chips and for Intel Wi-Fi chips that are expected to become available this summer. Changes to the network subsystem will enable the kernel to be more efficient when distributing network traffic across multiple processor cores.
When announcing the seventh release candidate of Linux 3.9, Linus Torvalds said quite a bit about a bug fix that affects x86-32 kernels with PAE support – but he didn't indicate when he plans to release 3.9. Torvalds also noted that most of the implemented corrections were minor. If this trend continues over the coming few days, RC7 may have been the last release candidate, as Torvalds had already indicated when releasing RC6.
Unless major issues arise, version 3.9 of the Linux kernel will, therefore, likely be released some time next weekend, but certainly before the end of April. The following description of the new features in terms of the kernel's driver and networking support will conclude the Kernel Log's "Coming in 3.9" mini series. Part 1 and 2 of this series discussed the changes that the kernel developers have made in the filesystem and storage areas and to the platform and infrastructure code.
The kernel's Radeon graphics driver now supports the Oland graphics chips that are used on series 8500 and 8600 Radeon HD cards (1, 2, 3). The kernel now also supports AMD's soon-to-be-expected Richland APU generation (1, 2). The developers have marked as deprecated the code that used to allow the X.org Radeon driver to directly influence the screen resolution and various other display characteristics. Current versions of the X.org driver no longer support the UMS (User Mode Setting) feature anyway and rely on the KMS (Kernel-based Mode Setting) functionality of the kernel's Radeon driver to perform such tasks.
The Nouveau driver now offers various experimental automatic and manual fan control features for the NV40 and NV50 GPUs that are used on GeForce series 6xxx to 9xxx and 1xx to 3xx graphics chips (1, 2, 3, 4). NVIDIA developer Aaron Plattner's "prime helpers", that allow drivers to use some of the Dma_buf/Prime DMA buffer sharing mechanism's core parts without having to implement them from scratch every time, have been integrated. Dma_buf/Prime is relevant for hybrid graphics solutions and embedded hardware and allows multiple chips to access a shared memory area via DMA; this avoids unnecessary and time-consuming data copy operations by the processor. However, the kernel interfaces for using Dma_buf/Prime carry an ID that indicates that they can only be used by GPL-compliant code; NVIDIA's proprietary driver doesn't use them for this reason. Plattner's submitted code isn't subject to these conditions; a beta of a new NVIDIA graphics driver is already using the interfaces to provide Optimus support for the first time.
The graphics driver for Intel's soon-to-be-expected Haswell processors has been enhanced to configure these processors' graphics core to use less power when only one display pipe is used with the Embedded DisplayPort (EDP); this is the case in some notebooks. The graphics driver for Texas Instruments' OMAP processors now offers improved power management features and supports OMAP5. The driver has also moved in with the other KMS drivers; previously, it was located the staging area for immature kernel code.
Major changes to the graphics drivers' locking mechanisms are designed to prevent displays from freezing temporarily while the system checks for available monitors, which happens in current Linux versions. Several other changes to the most important graphics driver subsystem are mentioned in the comment for the commit that introduced the majority of modifications for this subsystem.
TCP and UDP sockets now support a SO_REUSEPORT option that allows multiple sockets to listen on the same port. This enables, for example, multiple web server processes or threads to open individual sockets to listen on port 80; any connections that come in on this port will be evenly distributed across the sockets by the kernel.
This approach aims to improve the way workloads are distributed across the available processor cores. Google developer Tom Herbert, who programmed this extension, says that the new approach can help avoid bottlenecks that appear in certain situations when only one thread accepts new connections and then distributes them across other threads. The new approach is also designed to prevent workloads from being distributed very unevenly across processor cores; according to Herbert, this can happen when multiple threads are listening on a single socket. Details concerning these problems and other aspects of Herbert's approach can be found in the feature's commit comment and in an article on LWN.net.
Linux 3.9 will include a driver for Intel's series 7000 Wi-Fi components; apparently, these components will support the fast IEEE 802.11ac transmission modes (1, 2). It seems that the company is planning to introduce them in a few months – probably together with the Haswell-based notebook processors that are expected to become available this summer.
The mesh stack now offers basic power management support. The kernel developers have extended the kernel's radar detection features (1, 2, 3); these changes improve the kernel's Dynamic Frequency Selection (DFS) support by enabling Wi-Fi hardware to avoid certain frequency ranges in the 5GHz band if they would interfere with a radar system.
The Ethernet subsystem now includes a driver for the AX88179 component that is used in various manufacturers' USB 3.0 gigabit LAN hardware. The network stack now supports the Multiple Registration Protocol (MRP) that was specified in IEEE 802.1Q-2011 and developed from the Generic Attribute Registration Protocol (GARP) (1, 2). These protocols allow servers, routers and switches to share information on the VLANs (MVRP) and multicast groups (MVRP) that exist within a LAN.
Netpoll now works with IPv6, and the Netfilter's connection tracking code supports "connection labels". The kernel developers have also removed various old drivers that are hardly being used anymore or have ceased to function altogether; among them are the drivers for the 3com 3c501 that may still ring a bell with Linux veterans and the eepro and eexpress drivers for Intel's ISA LAN chips. Further network subsystem changes are listed in the comment of the commit that introduced the most important network subsystem changes for Linux 3.9.
Major changes to the driver code for configuring the HD audio codecs that are used in many modern desktop PCs and notebooks are said to make this code leaner and more robust. A new addition is the support of Creative's CA0132, a sound chip that is included in components such as Gigabyte's high-end G1.Sniper 3 motherboard (1, 2). Further important audio driver changes are mentioned in a Git commit comment.
Among the new additions to the media subsystem with its video hardware drivers is a driver for Montage Technology's TS2020 tuner. Among the platform driver modifications, the kernel developers have added a driver that supports Chromebooks by various manufacturers including, for example, the Chromebook Pixel (1, 2, 3). Another new addition is a driver for Cypress APA I2C trackpads; these trackpads are included in Samsung's ARM Series 3 Chromebook, which is currently a popular test item for Linux developers who have an interest in ARM. Also new is a driver for the Cypress PS/2 trackpad that Dell is using in its developer-oriented Ultrabook with Ubuntu 12.04. The USB subsystem now supports the Steelseries SRW-S1 steering wheel.
In the staging area, the developers have, for example, deleted the Zcache code and replaced it with code that was previously called Zcache2 (1, 2, 3, 4, 5, 6); like its predecessor, the new version attempts to store the page cache as well as data that would otherwise be put into swap storage in the working memory in compressed form.