KernelNewbies:

The 2.6.29 is not released yet.

Summary: Linux 2.6.29 adds kernel mode-switching.

2.6.29-rc1 has been released though, closing the merge window.

TableOfContents()

1. Prominent features (the cool stuff)

1.1. Kernel Modesetting

When we talk about "mode setting", we mean setting up things like the screen resolution and depth mode, in other words, configuring whatever it's neccesary in the graphics card to get it ready to display things on the screen. This may look easy to implement, but the graphics people say it's harder than it seems to design and implement right (multihead setups, hotplug, etc), which is why it has took so many time. To start with, mode setting implies allocating memory from the graphics card, which means that before doing modesetting it was neccesary to have the GEM memory manager ready and merged in the main tree, which did not happen until the previous release, 2.6.28.

Doing modesetting right is much harder if you consider how the typical Linux graphic setups works today. There're several drivers sharing the same piece of hardware (your graphics card), which is a very bad idea. One of these drivers is the X.org driver. It's a full implementation of all what is needed to make your graphics card work, and when you start up X.org all is fine. But when you switch from X.org to a VT console (using Ctrl+Alt+F1), the X.org driver has to stop handling the graphics card, because the control needs to be passed to another driver: the fb console driver. So the X.org driver saves the current state of the display, the graphics card is resetted and then it is handled to the fb driver, which has to reinitialize completely the card again (that's why there's a noticeable pause in the switch), even if the resolution in X and the console is the same. When you switch back to X.org, the card needs to be reconfigured again. This is a hairy, bug-prone mess, and it's difficult to make it working right in some cases; for example resuming of suspended/hibernated systems is more difficult with this design because sometimes a userspace program is required to reset the hardware to the proper state.

Enter modesetting, and those problems go away. Modesetting centralizes the mode setting code in the kernel drivers. While this may look like it's a lot of code for a kernel, it's actually the contrary: there's a single piece of code in charge of the modesetting, which means that the whole graphic stack gets smaller. And because there's only one implementation, and there's more code sharing, the quality and robustness is increased. Besides, mode setting is a task that really belongs to the kernel drivers (it's how every other operative systems, including some propietary unixes, have always done it). But all that is just a small part of the benefits: Suspend and resume are more likely to work because all the work will be done by the kernel driver, with no userspace components involved. X.org doesn't need anymore the root privileges (they were needed before only because the old drivers needed direct hardware access), making possible to [http://airlied.livejournal.com/59521.html run X.org as non-root], which is a huge security improvement, and moves X.org back to what it is supposed to do: drawing things, and not messing with hardware. It is also possible to print oopses (or even a Windows-like BSOD) to the screen if the kernel crashes while running under X. And if all this wasn't enought, you also get a FB console that runs on top of modesetting and GEM, making the old FB drivers completely obsolete while preserving their functionality at the same time. And with modesetting it isn't needed to reset the hardware when switching from X.org to a VT, and when switching, if the resolution is the same, there's no need to change anything, making possible to do flicker-free graphical boots and fast user switching.

However, trying modesetting in this release is not easy. In the kernel side, only the Intel driver is getting modesetting support in this release (support for other drivers is being worked on and will be merged in future releases). In the X.org side, it's even more difficult. Because when the kernel modesetting support is enabled, it is /!\ REQUIRED /!\ that the X.org driver also has modesetting support. If you enable kernel modesetting and you don't have a modesetting-enabled driver, X.org will NOT be able to work in any way and it even may crash your machine. There's no way to workaround this, except disabling modesetting. Right now, only the Intel driver seems to have a stable release with modesetting support, alpha support is being worked on for other drivers.

Code: Commit [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f453ba0460742ad027ae0c4c7d61e62817b3e7ef (commit)], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=79e539453b34e35f39299a899d263b0a1f1670bd (commit)]

1.2. Btrfs

Btrfs is a new filesystem developed from scratch following the design principles of filesystems like ZFS, WAFL, etc. Most of the work has been done by Chris Mason, an Oracle engineer who worked several years in Reiserfs v3. More information about btrfs can be found in the [http://btrfs.wiki.kernel.org/index.php/Main_Page btrfs wiki page]

Btrfs is under HEAVY development, which means that it is NOT stable and it may EAT the data you put in it, so it's strongly recommended not to use it for any other uses than testing, benchmarking and developing. The btrfs team is heading towards a 1.0 release, and the disk format is not expected to change anymore (but it will if a critical bug is found), so it's much more stable than it used to be,

Code: [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=fs/btrfs fs/btrfs]

1.3. Squashfs

Squashfs is a highly compressed read-only filesystem that is well know for being used in the Live-CDs of the most common Linux distributions and embedded distributions for some routers. It uses zlib compression to compress both files, inodes and directories. Inodes in the system are very small and all blocks are packed to minimise data overhead. Block sizes greater than 4K are supported up to a maximum of 1 Mbytes (default block size 128K).

SquashFS 4.0 supports 64 bit filesystems and files (larger than 4GB), full uid/gid information, hard links and timestamps.  It is intended for general read-only filesystem use, for archival use (i.e. in cases where a .tar.gz file may be used), and in embedded systems where low overhead is needed. Further information and userspace tools (needed to create the filesystem) are available from http://squashfs.sourceforge.net.

Code: [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=fs/squashfs fs/squashfs]

1.4. WiMAX

2.6.29 includes support for [http://en.wikipedia.org/wiki/WiMAX WiMAX], a telecommunication technology that provides wireless transmission of data using a variety of transmission modes. It provides up to 75 Mbit/s symmetric broadband speed without the need for cables. The technology is based on the IEEE 802.16 standard (also called Broadband Wireless Access). The stack has been [http://www.linuxwimax.org/ provided by Intel], and it includes a driver for the Intel Wireless WiMAX/WiFi Link 5x50 USB/SDIO devices.

Code: WiMAX stack [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0d695913b0016b362a84a8bb6d6e28f8d90a70e2 (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ace22f0881e1333d0c55ddf484e5352fe03a806a 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=60fa9ca6cfff2be4132ea93b7dd632801ec0c817 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ea912f4e7f264981faf8665cfb63d46d7f948117 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=15530dfd330bd19d14e096f88c70355a61fda3f2 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3e65646bb12be03b14dff53907391095a52d5f49 6], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=617209ccf73b571953cf4c76519c65a5e52d15fd 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b0c83ae1de01880075955c7224e751440688ec74 8)]

Driver: [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3e91029ae049852c153da3fc355ab255ea7e2e0a (commit 1], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ea24652d253eabfb83e955e55ce032228d9d99b9 2], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=024f7f31ed15c471f80408d8b5045497e27e1135 3], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ce6cde92803e961d95ddacdf74bd8b067f82f7d4 4], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=467cc396fb4665957bc7d182c96e45a4d7c575e4 5], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=aa5a7acabe31ec27a212cbd25cad9f72aa476591 6], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3a35a1d0bdf7cc32cddc234b956605e6d4db4673 7], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c71228caf91ec6320b489dec5cd0087b64da9fb5 8], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=11a7d0e3140d2f3e8052a856e8582ce9b021972c 9], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f398e4240fce962d0dd74dc11c59fe20860e7a71 10], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a8ebf98f541463107bb9544a1b611981dc2477e7 11], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=795038107b0078ee5ad3ad33327fe1c3520f6bf2 12], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=514ec71f7289c942f801bdbd309428c470bfc071 13], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=17d559af963995e483a51ec26697034431bcf2b9 14], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a0848826bfaf0815ec9654d78c218a40f755ccd4 15], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=020bb6f30b636d563d4268116107d592550ddd0c 16], [http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=143ee2d5557c0598a97f3089eb29e8226e0e8cee 17)]

Interesting features:

1.4.1. Other sources about 2.6.29 kernel


KernelNewbies: Linux_2_6_29 (last edited 2009-02-26 00:07:24 by diegocalleja)