KernelNewbies:

Linux 2.6.22 Released, 2007 ([http://kernel.org/pub/linux/kernel/v2.6/testing/ChangeLog-2.6.22 full SCM git log])

TableOfContents()

Short overview (for news sites, etc)

Important things (AKA: ''the cool stuff'')

New Slab allocator: SLUB

Recommended article from [http://lwn.net]: [http://lwn.net/Articles/229984/ "The SLUB allocator"]

The slab allocator is a object-caching kernel memory allocator used for dealing with "objects that are frequently allocated and freed" (see the [http://citeseer.ist.psu.edu/bonwick94slab.html "slab allocator" paper from Jeff Bonwick]). It's a critical piece of the inners of the memory management subsystem, and a critical piece to get good performance. The Linux slab allocator works quite well for pretty much everybody; however some people (SGI) has found its current design inefficient in some cases. For example, in 1K nodes/processors configurations, several GB of memory are wasted only in object queues, not counting the objects themselves. It also has become too complex when it grown features like proper NUMA policy support.

As result, a new slab allocator called "SLUB" has been developed by Christoph Lameter from SGI, to solve those and other problems. Its design is simpler, but it also adresses some problems that can result in better performance in some cases and more efficient memory usage (see the full design notes in this [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=81819f0fc8285a2a5a921c019e3e3d7b6169d225 commit link]). It also has better debug capabilities. There's a slabinfo userspace tool that you can find in Documentation/vm/slabinfo.c.

Its aim is to replace transparently slab, but in 2.6 this new slab allocator is optional and not enabled by default. You can enable it at compile time (making it the third option along with SLOB, the embedded-oriented slab allocator). SLUB has been tested for some time and it's solid enougth to try it on your systems, but due to the importance of this part of the kernel, it won't completely replace the current slab allocator until more exposure and testing has been done, hence it's not recommended to use it in production systems. Testing reports, specially regressions, are greatly appreciated.

[http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=mm/slub.c;hb=HEAD source code of mm/slub.c]; [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/vm/slub.txt user documentation]

New Wireless stack

* Add mac80211 wireless stack. [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f0706e828e96d0fa4e80c0d25aa98523f6d589a0 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=64a327a7029d3860ddf6a024816afa9e6673eb57 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a9de8ce0943e03b425be18561f51159fcceb873d (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e9f207f0ff90bf60b825800d7450e6f2ff2eab88 (commit)] * cfg80211: New wireless config infrastructure [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=704232c2718c9d4b3375ec15a14fc0397970c449 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2a5e1c0eb9efe26eed1dd072fe08de5797a7efd5 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9e101eab153073d8a1fc7ea22b20af65de8ab44b (commit)]

New Firewire stack

* Add device probing and sysfs integration. [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=19a15b937b26638933307bb02f7b1801310d6eb2 (commit)] * Add core firewire stack. [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3038e353cfaf548eb94f02b172b9dbe412abd24c (commit)] * Add SBP-2 protocol driver for storage devices. [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9ba136d0fe5a3dd33533b4a2a21156aa22f80ebe (commit)] * Add driver for OHCI firewire host controllers. [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ed5689122f4cdb5cb8c6770ad1a2c8561b32d9b3 (commit)]

Blackfin architecture

2.6.22 adds support for yet another architecture: The Analog Devices Blackfin processor architecture, and currently supports the BF533, BF532, BF531, BF537, BF536, BF534, and BF561 (Dual Core) devices, with a variety of development platforms including those avaliable from Analog Devices (BF533-EZKit, BF533-STAMP, BF537-STAMP, BF561-EZKIT), and Bluetechnix! Tinyboards.

The Blackfin architecture was jointly developed by Intel and Analog Devices Inc. (ADI) as the Micro Signal Architecture (MSA) core and introduced it in December of 2000. Since then ADI has put this core into its Blackfin processor family of devices. The Blackfin core has the advantages of a clean, orthogonal,RISC-like microprocessor instruction set. It combines a dual-MAC (Multiply/Accumulate), state-of-the-art signal processing engine and single-instruction, multiple-data (SIMD) multimedia capabilities into a single instruction-set architecture.

The Blackfin architecture, including the instruction set, is described by the [http://blackfin.uclinux.org/gf/download/frsrelease/29/2549/Blackfin_PRM.pdf ADSP-BF53x/BF56x Blackfin Processor Programming Reference]. The Blackfin processor is already supported by major releases of gcc, and [http://blackfin.uclinux.org/gf/project/toolchain/frs there are available binary and source rpms/tarballs for many architectures]. There is [http://docs.blackfin.uclinux.org/ complete documentation, including "getting started" guides], which provides links to the sources and patches you will need in order to set up a cross-compiling environment for bfin-linux-uclib. All the code is actively supported by Analog Devices Inc, at: http://blackfin.uclinux.org

[http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1394f03221790a988afc3e4b3cb79f2e477246a9 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a5f6abd4f7558fea97bc4021fd0eb7dcc5d16a77 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8cc75c9a1498913d668b6d3559940c6837cee8bf (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d24ecfcc3953f9c3b833508cd839be614a3f3c64 (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0851a2848cfd40012063ca9cf86fb67b7bebceff (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=194de5612777a9ff4f96dae1932f77a5a89e5f0a (commit)]

UBI

The shortest description for UBI is "LVM for NAND flash memory devices". Why duplicate LVM? Well, because flash devices can't really be handled as typical hard disks. UBI provides wear-leveling support across the whole flash chip. BI completely hides 2 aspects of flash chips which make them very difficult to work with: 1. wear of eraseblocks; 2. bad eraseblocks. UBI also makes it possible to dynamically create, delete and re-size flash partitions (UBI volumes).

http://www.linux-mtd.infradead.org/doc/ubi.html

Secure RxRPC sockets

* Provide secure RxRPC sockets for use by userspace and kernel both [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=17926a79320afa9b95df6b977b40cca6d8713cea (commit)] * Add an interface to the AF_RXRPC module for the AFS filesystem to use [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=651350d10f93bed7003c9a66e24cf25e0f8eed3d (commit)] * Make the in-kernel AFS filesystem use AF_RXRPC instead of the old RxRPC code [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=08e0e7c82eeadec6f4871a386b86bf0f0fbcb4eb (commit)] * Delete the old RxRPC code. [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=63b6be55e8b51cb718468794d343058e96c7462c (commit)]

signalfd()/timerfd()/eventfd()

http://lwn.net/Articles/225714/ http://www.freebsd.org/cgi/man.cgi?query=kevent&apropos=0&sektion=0&manpath=FreeBSD+6.2-RELEASE&format=html http://people.freebsd.org/~jlemon/papers/kqueue.pdf

The signalfd() system call implements signal delivery into a file descriptor receiver. The signalfd file descriptor if created with the following API:

The "ufd" parameter allows to change an existing signalfd sigmask, w/out going to close/create cycle (Linus idea). Use "ufd" == -1 if you want a brand new signalfd file. The "mask" allows to specify the signal mask of signals that we are interested in. The "masksize" parameter is the size of "mask". The signalfd fd supports the poll(2) and read(2) system calls. The poll(2) will return POLLIN when signals are available to be dequeued. As a direct consequence of supporting the Linux poll subsystem, the signalfd fd can use used together with epoll(2) too.

This patch introduces a new system call for timers events delivered though file descriptors. This allows timer event to be used with standard POSIX poll(2), select(2) and read(2). As a consequence of supporting the Linux f_op->poll subsystem, they can be used with epoll(2) too. The system call is defined as:

The "ufd" parameter allows for re-use (re-programming) of an existing timerfd w/out going through the close/open cycle (same as signalfd). If "ufd" is -1, s new file descriptor will be created, otherwise the existing "ufd" will be re-programmed. The "clockid" parameter is either CLOCK_MONOTONIC or CLOCK_REALTIME. The time specified in the "utmr->it_value" parameter is the expiry time for the timer. If the TFD_TIMER_ABSTIME flag is set in "flags", this is an absolute time,otherwise it's a relative time. If the time specified in the "utmr->it_interval" is not zero (.tv_sec == 0, tv_nsec == 0), this is the period at which the following ticks should be generated. The "utmr->it_interval" should be set to zero if only one tick is requested. Setting the "utmr->it_value" to zero will disable the timer, or will create a timerfd without the timer enabled. The function returns the new (or same, in case "ufd" is a valid timerfd descriptor) file, or -1 in case of error.As stated before, the timerfd file descriptor supports poll(2), select(2) and epoll(2). When a timer event happened on the timerfd, a POLLIN mask will be returned. The read(2) call can be used, and it will return a u32 variable holding the number of "ticks" that happened on the interface since the last call to read(2). The read(2) call supportes the O_NONBLOCK flag too, and EAGAIN will be returned if no ticks happened.

This is a very simple and light file descriptor, that can be used as event wait/dispatch by userspace (both wait and dispatch) and by the kernel (dispatch only). It can be used instead of pipe(2) in all cases where those would simply be used to signal events. Their kernel overhead is much lower than pipes, and they do not consume two fds. When used in the kernel, it can offer an fd-bridge to enable, for example, functionalities like KAIO or syslets/threadlets to signal to an fd the completion of certain operations. But more in general, an eventfd can be used by the kernel to signal readiness, in a POSIX poll/select way, of interfaces that would otherwise be incompatible with it. The API is:

The eventfd API accepts an initial "count" parameter, and returns an eventfd fd. It supports poll(2) (POLLIN, POLLOUT, POLLERR), read(2) and write(2). The POLLIN flag is raised when the internal counter is greater than zero. The POLLOUT flag is raised when at least a value of "1" can be written to the internal counter. The POLLERR flag is raised when an overflow in the counter value is detected.

* anonymous inode source [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5dc8bf8132d59c03fe2562bce165c2f03f021687 (commit)] * signalfd core [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fba2afaaec790dc5ab4ae8827972f342211bbb86 (commit)] * signalfd wire up x86 arches [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2121e24bd8dd16b4e3f8d995428e2a748d5180cc (commit)] * signalfd compat code [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6d18c9220965b437287c3a7e803725c24992ceac (commit)]

* timerfd core [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b215e283992899650c4271e7385c79e26fb9a88e (commit)] * timerfd wire up x86 arches [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=57ac8898508638ca6d15ecd8b911a431d673ff30 (commit)] * timerfd compat code [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=83f5d1266926c75890f1bc4678e49d79483cb573 (commit)]

* eventfd core [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e1ad7468c77ddb94b0615d5f50fa255525fde0f0 (commit)] * eventfd wire up x86 arches [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fdb902b1225e1668315f38e96d2f439452c03a15 (commit)] * KAIO eventfd support example [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9c3060bedd84144653a2ad7bea32389f65598d40 (commit)]

* epoll: use anonymous inodes [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=da66f7cb0f69ab27dbf5b9d0b85c4b97716c44d1 (commit)] * epoll cleanups: epoll no module [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cea69241870e55638156a026814551d6c575fd7f (commit)] * epoll cleanups: epoll remove static pre-declarations and akpm-ize the code [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7699acd1341c63fdbcfc56994fb2989ec59d2a43 (commit)]

Better process footprint measurement

utimensat(2)

Implement utimensat(2) which is an extension to futimesat(2) in that it

New drivers

* Add RTC class driver for the Maxim MAX6900 [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=aa5bd7e929325dbb48be43c3dccf7d1da433e38e (commit)] * Driver for the Maxim DS1WM, a 1-wire bus master ASIC core [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f19b121e21c1b032f6c612d2b9b499151f7b661b (commit)] * au1550 SPI controller driver [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=63bd23591e6c3891d34e4c6dba7c6aa41b05caad (commit)] * Misc: add sensable phantom driver [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cef2cf07273d12ac3453d2baff096423f17b7403 (commit)] * RTC: add rtc-rs5c313 driver [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e9f2bd8191a416fbd17e8bfc002dba5411937997 (commit)] * pasemi: hardware rng driver [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b8cb34481edfee6692c83d3b283e29820e840280 (commit)] Driver for the on-chip hardware random number generator on PA Semi PA6T-1682M. * MPC52xx PSC SPI master driver [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=00b8fd236764e3d5bc1d30dc65e256e283de4c3d (commit)] * RM9000 serial driver [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bd71c182d5a02337305fc381831c11029dd17d64 (commit)] * serial driver PMC MSP71xx [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=beab697ab4b2962e3d741b476abe443baad0933d (commit)] * ivtv driver for Conexant cx23416/cx23415 MPEG encoder/decoder. It took three core maintainers, over four years of work, eight new i2c modules, eleven new V4L2 ioctls, three new DVB video ioctls, a Sliced VBI API, a new MPEG encoder API, an enhanced DVB video MPEG decoding API, major YUV/OSD contributions from Ian and John, web/wiki/svn/trac support from Axel Thimm, (hardware) support from Hauppauge, support and assistance from the v4l-dvb people and the many, many users of ivtv to finally make it possible to merge this driver into the kernel [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1a0adaf37c30e89e44d1470ef604a930999a5826 (commit)] * /dev/spidevB.C interface [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=814a8d50eb1d88cedcef97567be53ee0d4512631 (commit)]

Crashing soon a kernel near you

This is a list of some of the ongoing patches being developed 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 dropped. The features are tested 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 you're safe):

Various core changes

Architecture-specific changes

Various subsystems

Filesystems

Networking

DM

SELinux

Audit

* auditing ptrace [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a5cb013da773a67ee48d1c19e96436c22a73a7eb (commit)]

Crypto

KVM

Power Management

Drivers

Network drivers

SATA/IDE/SCSI

Graphics

Sound

(commit)]

Input

MTD

USB

V4L/DVB

Added VIDIOC_INT_G_STD_OUTPUT and VIDIOC_INT_S_STD_OUTPUT to allow drivers to set the TV standard for video output separately from the video capture. This is needed for cx23415 support where the decoder is separate from the encoder and can have a different TV standard. Modified the saa7127 module to listen to VIDIOC_INT_G/S_STD_OUTPUT instead of VIDIOC_G/S_STD.

I2C

Bluetooth

Cpufreq

ACPI

HwMon

Watchdog

Various

KernelNewbies: Linux_2_6_22 (last edited 2007-06-02 21:25:06 by diegocalleja)