zurück zum Artikel

Verbesserungen allerorten – Die Neuerungen von Linux 2.6.25

| Thorsten Leemhuis

Neue und überarbeitet WLAN-Treiber, Optimierungen an Ext4 und CFS sowie haufenweise Verbesserungen an der Hardware-Unterstützung und der Infrastruktur zeichnen Linux 2.6.25 aus. Proprietäre USB-Treibern müssen von nun an allerdings draußen bleiben.

Mit über zwölftausend Commits zwischen den Linux-Versionen 2.6.24 und 2.6.25 waren die Kernel-Entwickler in den vergangenen zwölf Wochen so fleißig wie nie zuvor in der 2.6-Serie [1]. All diesen Änderungen modifizieren über eine Million der knapp neun Millionen Zeilen im Quellcodearchiv des Linux-Kernels und bringen dabei zahlreiche wichtige Neuerungen, von denen viele Linux-Anwender über kurz oder lang profitieren.

So verbesserten die Kernel-Hacker die bereits mit 2.6.24 überarbeitete WLAN-Unterstützung weiter und integrierten erneut einige weitere Treiber für verschiedene WLAN-Hardware. Auch für Echtzeit-Umgebungen gab es wieder einige Verbesserungen – unter anderem für den noch jungen und mit Programmen und deren Threads jonglierenden Completely Fair Scheduler (CFS). Erheblich fortgeschritten ist auch die Entwicklung des seit einigen Monaten zu Test- und Entwicklungszwecken integrierten Ext4-Dateisystems. Erstmals dabei ist das Sicherheitsframework Smack, das einfacher in der Handhabung sein soll als SELinux. Eine der Neuerungen von 2.6.25 dürften so manche Anwender aber als Rückschritt einstufen: Die neue Linux-Version verwehrt proprietären, als Kernel-Modul realisierten USB-Treibern den Zugriff auf einige zentrale und zur Funktion unerlässliche Treiber-Schnittstellen.

Die bislang genannten Änderungen sind nur die aller wichtigsten von Linux 2.6.25, das wie jede anderen neue Kernel-Version der Hauptentwicklungslinie [2] auch eine Unmenge neuer und überarbeiteter Treiber sowie haufenweise Verbesserungen an der Infrastruktur mitbringt. Das Changelog [3] listet alle Anpassungen seit 2.6.24 im Detail für all jene, die es ganz genau wissen wollen und genug Zeit zum Studium des mehrere Megabyte großen Dokuments haben. Einen flotter zu lesenden Überblick über die bereits kurz erwähnten und viele andere wichtige Neuerungen liefert der folgende Artikel:

Im Artikel finden sich zudem einige Verweise auf das Glossar von heise online, das einige allgemeine und zeitlose Informationen zum Linux-Kernel und dessen Entwicklung bereithält:

[21]

Nach der Aufnahme von sieben neuen WLAN-Treibern [22] in Linux 2.6.24 bringt die Kernel-Version 2.6.25 erneut eine Vielzahl weiterer wichtiger Verbesserungen für WLAN-Hardware mit. So integrierten [23] die Entwickler etwa den Treiber ath5k [24] für Atheros-Hardware – so manche Linux-Anwender schätzen Chips dieses Herstellers, da das Madwifi-Projekt [25] für diese seit vielen Jahren einen recht ordentlichen Linux-Treiber bereitstellt.

Entwicklungslinien des Linux-Kernels Die Kernel-Hacker entwickeln den Linux-Kernel im Rahmen der 2.6-Serie stetig weiter. Dabei scheuen sie auch nicht vor umfangreichen Änderungen zurück. Es wird daher auf absehbare Zeit keinen 2.7-Entwicklerzweig geben, aus dem irgendwann ein Linux 2.8.0 oder 3.0.0 hervorgeht, wie Linux 2.6.0 aus dem 2.5-Entwicklerzweig entstand; stattdessen pflegen die Entwickler mehrere Kernel-Serien für verschiedene Anwenderkreise parallel. Die Hauptentwicklungslinie stellen die Versionen mit drei durch Punkte getrennten Nummern (2.6.x, also etwa 2.6.24) dar. Parallel zur Hauptentwicklung pflegen die Verwalter der Stable-Kernel-Serie die beiden jeweils neusten Versionen der Hauptentwicklungslinie weiter und kennzeichnen die Überarbeitungen durch eine zusätzliche Zahl (2.6.x.y, beispielsweise 2.6.22.10 oder 2.6.23.8). (...mehr... [26])

Der Madwifi-Treiber steht unter einer Open-Source-Lizenz, nutzt aber ähnlich wie die Kernel-Module der proprietären AMD- und Nvidia-Grafiktreiber einen nicht offen liegenden Kern [27] – dessen Code wird in das Modul eingebaut und auf dem Prozessor des Systems ausgeführt. Das ist der für viele Open-Source-Entwickler der entscheidende Unterschied zu der von vielen andere WLAN-Treibern benötigten und meist ebenfalls nicht quelloffenen WLAN-Firmware, die lediglich auf den WLAN-Chip geladen und dort ausgeführt wird und nicht im Kontext im Linux-Kernels läuft.

Die Linux-Kernel-Entwickler und ausschließlich auf Open-Source-Software setzenden Linux-Distributionen integrierten den Madwifi-Treiber aufgrund des proprietären Kerns nicht. Der vom OpenBSD-Projekt gestartete [28] und zwischenzeitlich auf den MAC80211-WLAN-Stack von Linux portierte Ath5k-Treiber hingegen kam für die Kernel-Entwickler in Frage, da er komplett einer Open-Source-Lizenz unterliegt; Ath5k unterstützt allerdings einige der neueren Atheros-WLAN-Chips (noch) nicht, mit denen der Madwifi-Treiber zusammenarbeitet. Die Madwifi-Entwicklung verläuft allerdings mittlerweile auf Sparflamme, da sich das Projekt und seine Entwickler jetzt vornehmlich auf Ath5k [29] konzentrieren.

Mit rtl8180 [30] stößt ein weiterer WLAN-Treiber für verbreitete WLAN-Hardware neu zum Linux-Kernel hinzu; der Treiber eignet sich für die von verschiedenen Herstellern eingesetzten [31] WLAN-Chips RTL8180 und RTL8185 von Realtek. Ferner überarbeiten die Entwickler den Netzwerktreiber für die Playstation 3 (PS3), sodass er jetzt auch die WLAN-Chip der teilweise mit WLAN ausgerüsteten Spielkonsolen unterstützt (1 [32], 2 [33]). Neu dabei ist der Treiber rndis_wlan [34] für Rndis-WLAN-Chips wie den Broadcom 4320, der unter anderem [35] in WLAN-Hardware von Asus, Linksys oder U.S. Robotics steckt. Ebenfalls stark überarbeitet sowie auf den WLAN-Stack MAC80211 [36] portiert wurde der Treiber zd1211rw [37] für WLAN-Chips von ZyDAS, den ebenfalls verschiedene Hardware-Hersteller [38] einsetzen. Am noch jungen WLAN-Stack sowie den meisten der sieben mit Linux 2.6.24 integrierten WLAN-Treiber gab es zahlreiche Verbesserungen; einige von ihnen sorgen für Unterstützung der 802.11n-Übertragungsmodi im nun nicht mehr [39] als experimentell gekennzeichneten WLAN-Stack (1 [40], 2 [41], 3 [42], 4 [43], 5 [44], 6 [45]) und in den Treibern für Intels WLAN-Modul IPW4965 (1 [46], 2 [47], 3 [48], 4 [49], 5 [50], 6 [51], 7 [52]).

[53]

Das Ext4-Dateisystem [54] – designierter und mit Linux 2.6.19 [55] zu Test- und Entwicklungszwecken [56] integrierter Nachfolger von Ext3 – erfuhr eine ganze Reihe von Neuerungen mit 2.6.24. Der Multi Block Allocator [57] etwa soll die Performance verbessern, während der Kernel über Prüfsummen nun die Integrität des Journals [58] sicherstellt, damit nach einem Systemabsturz beim Recovery-Vorgang keine fehlerhaften Daten auf der Platte landen.

Das On-Disk-Format von Ext4 soll mit diesen und einigen der anderen in 2.6.25 integrierten Änderungen (etwa Unterstützung größerer Dateien [59], Unterstützung für Blockgrößen bis zur PAGESIZE [60], 48 bit inode i_blocks [61] oder inode version support [62]) nun feststehen – mit dem Dateisystem experimentierten Anwender müssen daher nicht mehr ab und an die Daten vorübergehend auslagern, um das Volume für eine überarbeitete Ext4-Variante neu zu formatieren. Hundertprozentig ausschließen [63] wollte der Ext4-Betreuer Theodore Ts'o weitere Änderungen aber nicht. Vom Einsatz auf Produktivsystemen raten die Ext4-Programmierer daher weiterhin ab; in der Ende April erwarteten Linux-Distribution Fedora 9 [64] soll sich das neue Dateisystem allerdings bereits zu Testzwecken [65] nutzen lassen, wenn man dem Installer den Parameter "ext4" übergibt.

Abgeschlossen ist die Ext4-Entwicklung auch nach diesen Änderungen noch nicht; mit einem Online-Defragmentierer [66] und Delayed Allocation stehen weitere Verbesserungen am noch jungen Dateisystem auf der To-do-Liste, die aber wahrscheinlich keine Änderungen an den Datenstrukturen auf der Platte mit sich bringen werden.

[67]

Abermals überarbeitet und um neue Funktionen erweitert wurde der mit Linux 2.6.23 [68] integrierte und bereits mit 2.6.24 weiter verbesserte Completely Fair Scheduler [69] (CFS). Auf Desktop-Systemen dürfte man von vielen der Neuerungen aber nicht allzu viel merken, da sich viele der behobenen und teilweise Performance-relevanten Probleme nur in ungewöhnlichen Konfigurationen zeigten. Zu den weiteren Optimierungen zählen ein besseres Handling von Realtime-Tasks (1 [70], 2 [71], 3 [72], 4 [73]), akkurateres Scheduling [74] dank der exakter arbeitende High Resolution Timer und Optimierungen am noch recht neuen Group Scheduling (1 [75], 2 [76], 3 [77], 4 [78]).

Der in Linux 2.6.25 enthaltene CFS bringt zudem erstmals Unterstützung [79] für das Anfang dieses Jahres vorgestellte [80] Programm LatencyTop [81] mit – mit ihm und Kernel 2.6.25 kann man so in Zukunft grob verfolgen, in welchen Code-Bereichen der Linux-Kernel während der Abarbeitung einer Aufgabe am meisten Zeit verbringt. So kann man das System über zur Laufzeit veränderbare Einstellmöglichkeiten oder Änderungen am Quellcode selbst gezielt optimieren, falls etwa eine Server-Software bei bestimmten Aufgaben nicht schnell genug reagiert oder bei der Videowiedergabe und -bearbeitung Ruckler entstehen. Welchen positive Nutzen die Verfügbarkeit solcher Diagnose-Software hat, zeigte im vergangenen Jahr das ebenfalls von Intel-Programmierern entwickelte Programm Powertop [82]. Mit dessen Hilfe durchforsteten einige Distributionen ihre kompletten Software-Ausstattung, um Programme zu finden und zu korrigieren, die der CPU unnötig Arbeit machen und so die Leistungsaufnahme erhöhten.

[83]

Peformance-Problem Dass selbst kleine und unscheinbar aussehende Patches [84] eine Performance-Einbuße von 30 Prozent in einzelnen Benchmark-Szenarien (in diesem Fall: Tbench auf einem System mit vier Quad-Core-CPUs) nach sich ziehen können, zeigte sich während der 2.6.25-Entwicklung nach einer kleinen Änderung an den Include-Dateien im Netzwerk-Subsystem; das durch schlechte Anordnung der Variablen im Speicher (Unaligned Memory Access) ausgelöste Problem wurde jedoch rechtzeitig bemerkt und korrigiert [85] Um genau solche Probleme zu vermeiden, hatten die Entwickler erst kurz zuvor ein Dokument [86] zu den Linux-Quellen hinzugefügt, das einige Hintergründe zur Speicherverwaltung moderner CPUs erklärt und beschreibt, wie man Unaligned Memory Access vermeidet.

Wie viel Arbeitsspeicher eine Anwendung und die von ihr genutzten Libraries tatsächlich blockieren, soll sich bei Linux 2.6.25 durch die unter den Stichwörtern maps4 und Proportional Set Size (PSS) entwickelten und nun integrierten Patches (unter anderem 1 [87], 2 [88], 3 [89], 4 [90]) zusammen mit passenden Programmen im Userspace besser beantworten lassen [91]. Bei älteren Kerneln waren die vom Kernel gelieferten Daten für genaue Angaben häufig nicht ausreichend; eine Shared Library wurde so bei der Abfrage nach dem Speicherverbrauch unter Umständen bei jeder auf sie zurückgreifenden Anwendung mitgezählt, obwohl die Library tatsächlich nur einmal im Speicher vorhandenen war.

Kaum bemerken dürften die meisten Anwender die Integration des im RT-Tree [92] entwickelten Preempt-RCU [93] (Preemptive Read-Copy Update; siehe auch 1 [94] und 2 [95]). Durch diese optionale Neuerung kann der Kernel nun auch den RCU-Code unterbrechen, wenn es wichtigeres zu tun gibt; das ist insbesondere für Realtime-Umgebungen interessant, wo es auf kurze oder verlässliche Antwortzeiten ankommt.

Für größere Mehrprozessor-Systeme hingegen dürften die neuen FIFO Ticket spinlocks [96] (siehe auch 1 [97]) von Interesse sein. Beim durch Spinlocks [98] geschützten Zugriff auf eine Ressource sollen miteinander konkurrierenden Threads nun in der Reihenfolge Zugriff erhalten, in der sich diese darum bemühten (FIFO – First In, First Out); zuvor erhielten einzelne Threads teilweise recht schnell Zugriff, während Threads, die sich viel früher um den Zugriff bemüht hatten, teilweise um ein Vielfaches länger warten mussten.

[99]

Die mit 2.6.24 [100] gestartete und zu einem großen Teil von Scripten durchgeführte Zusammenlegung der Verzeichnisse [101] mit dem Code für die x86-32- und x86-64-Architekturen führten die Entwickler weiter fort, indem sie viele weitere Dateien nun händisch zusammenführten. Abgeschlossen ist die Vereinigung damit aber noch lange nicht; im x86-Entwicklerzweig für 2.6.26 legten die Kernel-Hacker bereits eine ganze Reihe weiterer Dateien zusammen, was die Wartung vereinfachen und langfristig zu einem zuverlässigeren Kernel mit weniger Fehlern führen soll.

Dieses Ziel haben auch zahlreiche umfangreiche Änderungen (etwa 1 [102], 2 [103] ) an der Basis-Infrastuktur für Treiber (Driver Core). An einigen Stellen aufgeräumt und besser strukturiert [104] wurde auch die zusammen mit dem Kernel ausgelieferte Dokumentation [105]. Im Rahmen einer Debatte um die Aufnahme von BadRAM [106] stellen die Diskussionsteilnehmer fest, dass sich auch mit den bereits im Kernel enthaltenen Funktionen ein defekter Speicherbereich von der Nutzung ausschließen lässt; die Kernel-Dokumentation erwähnt die nötigen Schritte [107] nun kurz. Den Kernel-Parameter [108] time zum Anzeigen der Zeiten vor jeglichen Kernel-Ausgaben entfernten [109] die Entwickler, da der Parameter printk.time=y selbiges seit längerem erledigt.

[110]

Das Sicherheitsframework Simplified Mandatory Access Control Kernel (Smack [111]) hat wie erwartet mit 2.6.25 den Sprung [112] in den "offiziellen" Linux-Kernel geschafft. Smack bietet wie SELinux Mandatory Access Control (MAC [113]), verzichtet aber bewusst auf manche der erweiterten Schutzfunktionen von SELinux. Dadurch soll Smack deutlich einfacher in der Handhabung sein als das als schwierig zu bedienen verschriene SELinux. Wie es um die Integration des von einigen bekannten Kernel-Entwicklern stark kritisierten AppArmor steht, ist weiter ungewiss – die kurz vor Weihnachten zur Diskussion an die Kernel-Mailingliste gesendeten Patches mit dem Sicherheitsframework wurden für die 2.6.25-Entwicklung nicht aufgenommen und nur wenig diskutiert.

Kernel 2.6.25 unterstützt nun auch auf der x86-Architektur (1 [114], 2 [115], Dokumentation [116] ) den designierten BIOS-Nachfolger EFI (Extensible Firmware Interface [117]). Zu Wartezwecken vor I/O-Operationen schreibt der Kernel nun nicht mehr immer an den Port 0x80, sondern auf Wunsch stattdessen an 0xed [118], da die bisher genutzte Methode zu Abstürzen auf einigen neueren HP-Notebooks führt. Vorausgegangen war dieser Änderung eine lange Diskussion [119] auf der Linux Kernel Mailing List (LKML), wie der Fehler am besten gelöst werden soll.

Die neuen Linux-Version unterstützt erstmals [120] Marvells System-on-a-Chip-Architektur der Orion-Familie (eine ARM-Variante). Diese hoch integrierten Bausteine finden sich in vielen NAS-Geräten [121] und manch anderer mit Linux laufender Consumer Hardware.

Zu Ende geht es mit der seit langem nicht mehr gewarteten Unterstützung für Smbfs (Windows-Netzwerk/Samba-Client) – sie gilt nun offiziell als deprecated [122] (abgelehnt, missbilligt) und soll bald rausfliegen. Mit Cifs bringt der Kernel seit langem flexibleren und gewarteten Code für das CIFS- und SMB-Protokoll mit, für das die meisten Linux-Distributionen auch schon seit langem das passende Userspace-Programm (mount.cifs) mitbringen.

Der Netzwerk-Stack bringt nun ein Framework (1 [123], 2 [124], 3 [125], 4 [126], Dokumentation [127], Hintergrundartikel [128]) für das unter anderem zur Komponenten-Kommunikation in Fahrzeugen genutzte Controller Area Network (CAN [129]) mit. Über die von Volkswagen-Entwicklern eingebrachte Protokollfamilie PF_CAN und die einheitliche Netzwerktreiber Schnittstelle für CAN-Hardware können sich nun mehrere Linux-Anwendungen an der CAN-Kommunikation beteiligen – ähnlich wie bei einem normalen Netzwerkgerät. Bisherige CAN-Treiber für Linux stellten zumeist ein Character-Device mit einer herstellerspezifischen Programmierschnittstelle bereit, auf das jeweils nur eine Anwendung zugreifen konnte.

[130]

An den zahlreichen von Kernel unterstützten Virtualisierungstechniken gab es ebenfalls zahlreiche Änderungen. So implementiert der x86-Emulator von KVM [131] einige Instruktionen und Komponenten zusätzlich (1 [132], 2 [133], 3 [134], 4 [135]), was die Performance und Kompatibilität verbessern soll; zudem wurden auch vorbereitende Patches für eine Portierung von KVM auf andere Architekturen wie IA64 eingepflegt [136]. Ein Linux als KVM-Host kann nun zudem unter gewissen Umständen vom Gast genutzte Speicherbereiche auslagern [137] (Swappen), und so gegebenenfalls Speicher auf dem Host-System freizuschaufeln. Weitere Verbesserungen gab es an dem Virtio-Framework (etwa das Virtio PCI-Device [138] und der Balloon-Treiber [139]), auf dessen Techniken und Treiber-Schnittstellen verschiedene Virtualisierungslösung bei der Emulation der Gastsysteme zurückgreifen können – im Idealfall soll ein mit Xen erzeugtes Gastsystem mit Virtio-Treibern so problemlos unter KVM oder Qemu starten. Paravirt_ops arbeitet nun auch [140] auf der x86-64-Architektur.

Für Container-Lösungen wie OpenVZ und Linux-VServer gab es mit 2.6.24 zahlreiche Verbesserungen, die mit 2.6.25 weiteren Feinschliff erhielten. Die Gastsysteme können nun virtuelle Dateisysteme Procfs und Sysfs einbinden, ohne dass diese versehentlich Informationen des Host-Systems preisgeben oder letzteres beeinflussen. Über den neuen Memory Resource Controller (1 [141], 2 [142], Dokumentation [143], Hintergrundartikel [144]) und die mit 2.6.24 aufgenommenen Control Groups lässt sich der Speicherverbrauch einzelner Anwendungen oder eines kompletten Containers limitieren, damit diese nicht durch übermäßigen Ressourcenverbrauch andere Container, das Host-System oder andere Anwendungen stören.

Neben all diesen Änderungen gibt es noch einige weitere mit je nach Architektur und Einsatzgebiet mehr oder weniger Bedeutung für den Linux-Einsatz. Die wichtigsten der weniger wichtigen listet eine Übersicht am Ende des Artikels [145] jeweils mit einer Kurzbeschreibung, die auf weiterführende Informationen verlinkt.

[146]

Informationsquelle Quellcodeverwaltung Viele der Links im Artikel und die an dessen Ende gelisteten Kurzbeschreibung zu weniger wichtigen Änderungen [147] verweisen auf den oder die für die Neuerung jeweils relevanten Commit im Web-Frontend [148] des von Linus Torvalds mit Git [149] verwalteten Linux-Quellcodes. Dort finden sich viele weitere Informationen zu den einzelnen Änderungen und ihren Hintergründen. Auch die im Rahmen des jeweiligen Commit angewendeten Patches sind im Web-Frontend über den Link Commitdiff abrufbar und durch Kommentare und Dokumentationsänderungen häufig auch für Interessierte ohne Programmierkenntnisse eine gute Quelle für weitere Informationen. Das Web-Frontend von Git zeigt im unteren Bereich auch eine Liste der im Rahmen des jeweiligen Commit veränderten Dateien an. Hinter den Dateinamen finden sich Links, über die sich die Änderungen an den einzelnen Dateien separat anzeigen lassen; so kann man sich etwa Änderungen an der Dokumentation oder den für die Kernel-Konfiguration zuständigen Kconfig-Dateien einzeln betrachten.

Wer proprietäre und als Kernel-Modul ausgeführte USB-Treiber nutzt, sollte den Umstieg auf 2.6.25 und spätere Kernel-Versionen noch herauszögern, da sich solche Treiber mit einem unmodifizierten Linux 2.6.25 nicht mehr kompilieren [150] lassen. Ursache dafür ist eine von Greg Kroah-Hartman eingebrachte Änderung [151], durch die der Kernel einige für USB-Kernel-Treiber zwingend benötigte Schnittstellen nun via EXPORT_SYMBOL_GPL exportiert. Damit möchte der langjährige Kernel-Entwickler und Verwalter des USB-Subsystems klarstellen, dass nur unter der GPL2 oder kompatiblen Lizenzen stehende Treiber dieses API und den dahinter stehenden Code direkt nutzen dürfen – er stammt zu nicht unerheblichen Teilen von Kroah-Hartman selbst.

Diese Änderung war bereits vor zwei Jahren für einige Wochen in der Hauptentwicklungslinie des Kernels enthalten, wurde dann aber kurz vor der Veröffentlichung von 2.6.16 [152] wieder entfernt. Das sollte Firmen wie AVM genug Zeit geben, ihre Linux-Treiber so anzupassen, dass sie wie ein normales Closed- oder Open-Source-Programm im Userspace arbeiten und von da über für Userspace-Anwendungen freigegebene Schnittstellen auf USB-Geräte zugreifen. Diese Möglichkeit hat AVM aber nicht aufgegriffen; die Firma begründete das mit hohen Entwicklungskosten und technischen Schwierigkeiten. Einige andere Firmen haben sogar in den vergangenen zwei Jahren noch neue proprietäre USB-Kernel-Treiber entwickelt, obwohl der Kernel seit Version 2.6.16 bereits mit Warnmeldungen deutlich auf die jetzt umgesetzte Änderung hinwies.

[153]

Die Änderung am USB-System und ein unabhängig davon eingebrachter Patch am Module-Loader sorgten zwischenzeitlich dafür, dass auch der Ndiswrapper keinen Zugriff auf das USB-Subsystem mehr hatte. Nach einigen längeren Debatten auf der Linux-Kernel Mailing List (LKML) wurde der zweite Patch jedoch wieder weitgehend zurückgezogen, sodass der Ndiswrapper seit der vierten Vorabversion [154] von 2.6.25 wieder problemlos mit dem Kernel zusammenarbeitet.

In den Vorabversionen von 2.6.25 war auch der seit Jahren umstrittene [155], aber in vielen Distributions-Kerneln enthaltene Patch kurzzeitig enthalten, durch den der Kernel auf eine händisch angepasste DSDT (Differentiated System Description Table) aus der Initial-Ramdisk (Initrd) zurück greifen kann, statt die vom Hersteller programmierte DSDT des ACPI-BIOS zu nutzen. Ob man den Anwendern diese Möglichkeit an die Hand geben sollte war allerdings nicht wie sonst die Ursache für Debatten; vielmehr hatte ein langjähriger Kernel-Entwickler die technische Implementierung bereits kurz nach der Integration des Patches nachhaltig kritisiert, da die Initialisierung des Kernels in einer anderen Reihenfolge erfolgt, sofern die Initrd eine modifizierte DSDT enthält.

Daraus entstand eine Debatte, die jedoch ohne Konsens und Folgen verebbte. Einige Wochen später im Entwicklungszyklus von 2.6.25 entfernte Torvalds den Patch [156] dann plötzlich; der Code sei schlicht nicht ausgereift und würde "hässliche Dinge" tun. Einer überarbeiteten und sauber arbeitenden Variante des Patches scheint er jedoch nicht abgeneigt zu sein. Bis es eine solche gibt und sie den Sprung in den Kernel schafft, müssen die Distributoren den von den Kernel-Entwicklern wegen Qualitätsmängeln abgelehnten Patch wohl weiter selbst pflegen.

Treibereien Unter der Unmenge der in Linux 2.6.25 integrierten Änderungen sind viele mehr, die die Hardware-Unterstützung der zahlreichen im Linux-Kernel enthaltenen Treiber verbessern, ihren Funktionsumfang erweitern oder in ihnen enthaltene Fehler korrigieren. Die nebenstehenden Absätze nennen nur die wichtigsten Neuerungen bei Treibern; viele weitere finden sich am Ende des Artikels [157] in einer Liste mit einer Kurzbeschreibung der jeweiligen Änderung. Diese verlinkt zum jeweiligen Commit im Webinterface des Linux-Quellcodeverwaltungssystems, wo sich in der Regel weitere Informationen zur Änderung und ihren Hintergründen finden.

Neben den bereits erwähnten Verbesserungen bei der Unterstützung von WLAN-Hardware integrierten die Entwickler wie üblich zahlreiche weitere Treiber oder überarbeiteten die enthaltenen Treiber und die sie umgebenen Subsysteme. So veränderten [158] die Highpoint-Mitarbeiter den von ihnen programmierten und betreuten Treiber hptiop für Highpoint-RAID-Adapter erheblich, sodass er nun neben den RocketRAID-Controllern der 3xxx-Serie auch jene der 4xxx-Reihe ansteuert. Für diese mit Marvell-Chips ausgestatteten Steckkarten musste man bislang mit einem proprietären Treiber herumhantieren, sofern man RAID-Unterstützung benötigte.

Der mit 2.6.24 neu dazu gestoßenen Netzwerk-Treiber e1000e kommt nun nicht mehr nur bei neueren Intel-Southbriges und einigen anderen ausgewählten Chips zum Einsatz, sondern jetzt auch [159] bei vielen anderen PCI-Express-Netzwerkchips, die bislang der Vorgänger e1000 betreute. Falls der neue Treiber Probleme macht, lässt sich der Umstieg vermeiden, indem man e1000e bei der Kernel-Konfiguration deaktiviert; nur dann fühlt sich der ältere e1000-Treiber wieder für die PCIe-Netzwerkchips zuständig.

Weitgehend auf dem Stand von Alsa 1.0.16 [160] angelangt sind die Audio-Treiber des Kernels. Sie können nun sowohl Asus' EeePC [161] als auch C-Medias CMI8788 [162] ansprechen. Mit neueren Audio-Codecs wie Realteks ALC889, ALC267 und ALC269 [163] oder Sigmatels STAC92HD71 [164], STAC92HD73 [165] und die STAC92HD71BXX-Familie [166] können die Audio-Treiber nun ebenso umgehen wie mit den auf VIAs VT1724 [167] aufsetzenden Soundkarten Audiotrak Prodigy 7.1 HiFi & HD2 und der Fortissimo IV von Hercules. Wie mit jeder neuen Kernel-Version wurden die Whitelists für die System-spezifischen Workarounds aktualisiert, sodass die Audio-Treiber nun bei noch mehr Mainboards und Notebooks automatisch alles richtig machen, ohne dass man die Workarounds durch Übergabe eines Parameters beim Laden des Treiber manuell aktivieren muss; in die Whitelist aufgenommen wurden etwa das VX1 von Asus [168], das L745 von MSI [169] oder das Gigabyte-Board P35 DS3R [170].

Der Direct Rendering Mananger (DRM) initialisiert den Grafikkern neuerer Intel-Chipsätze nach dem Suspend nun erneut [171] – dadurch sollen die Suspend-Modi auf vielen Systemen mit Intel-Chipsätzen besser arbeiten. Zudem kam rudimentäre Unterstützung [172] für die auf Radeon X1xxx-Grafikkarten eingesetzten r500-Chips von AMD/ATI hinzu. Damit sollte sich auf diesen Grafikkarten 2D-Beschleunigung nutzen lassen – an 3D-Beschleunigung für diese Grafikchips im DRM und dem X.org-Treiberpaket ATI arbeiten Kernel- und X-Entwickler wie Dave Airlie derweil [173].

Das DVB-Subsystem des Kernels und einige DVB-Treiber unterstützen mit 2.6.25 nun Hybrid Tuner besser – also die Tuner von TV-Karten, die sich beispielsweise für DVB-T und DVB-S eignen. Zahlreiche Verbesserungen erfuhren die DVB-Treiber ivtv und pvrusb2 [174]; zudem gab es allerlei Aufräumarbeiten und Verbesserungen in vielen weiteren DVB- und V4L-Treibern. Der Treiber cx23885 unterstützt nun auch analogen TV-Empfang sowie die WinTV-Modelle HVR1250 [175], HVR-1500 (1 [176], 2 [177], 3 [178]) und HVR1800 [179] von Hauppauge.

Endgültig entfernt [180] wurden wie geplant einige OSS-Sound-Treiber wie btaudio, cs4232, i810_audio und via82cxxx_audio, für die der Kernel seit längerem Ersatz in Form von Alsa-Treibern mitbringt. Der alte WLAN-Stack Softmac [181] soll genau wie der wie der bcm43xx-Treiber [182] während des 2.6.26-Entwicklungszyklus aus dem Kernel fliegen.

Sowohl das I2C-Subsystem [183], die Audio-Treiber, als auch die AHCI- [184] und PATA- [185]Treiber können bereits mit den verschiedenen Varianten des ICH10 umgehen – der Southbridge, die zahlreiche der im Frühsommer erwarteten Intel-Chipsätze einsetzen werden. Neu mit 2.6.25 ist auch der Netzwerktreiber bnx2x [186] für Broadcoms 10G-Chip BCM57710, der Treiber enc28j60 [187] für den ENC28J60-Chip und der Treiber ipwireless [188] für in verschiedenen UMTS-3G-PC-Cards enthaltene Modem-Chips.

Erstmals bringt der Kernel mit Version 2.6.25 Unterstützung für Sonys MemoryStick [189] und den MemoryStick-Host-Controller JMicron JMB38x [190] mit – das ganze ist aber noch recht rudimentär und unterstützt nur MemoryStick Pro-Karten mit TI FlashMedia MemoryStick-Interface. Mancher Anwender mag sich fragen, ob dieser und andere rudimentäre und noch in einer frühen Entwicklungsphase befindliche Treiber schon reif genug für den Kernel sind – diesbezüglich stellten Torvalds und einige andere Entwickler kürzlich in einer Diskussion um einen mit 2.6.25 neu aufgenommenen Infiniband-Treibers [191] klar, dass ein früher Aufnahmezeitpunkt für Treiber gewünscht sei (1 [192], 2 [193]), da ein rudimentär arbeitender Treiber für viele Anwender besser sei als gar kein Treiber.

Linux-
Version
Anzahl
Dateien¹
Zeilen
Quelltext²
Entwicklungs-
zeitraum
Anzahl
Commits³
Diffstat⁴
2.6.20 [194]212808102486
(7400843)
66 Tage47685825 files changed, 262475
insertions(+), 136162 deletions(-)
2.6.21 [195]216148246470
(7522286)
80 Tage50166568 files changed, 319232
insertions(+), 175247 deletions(-)
2.6.22 [196]224118499363
(7744727)
74 Tage65267620 files changed, 519591
insertions(+), 266699 deletions(-)
2.6.23 [197]225308566554
(7818168)
93 Tage66627203 files changed, 406268
insertions(+), 339071 deletions(-)
2.6.24 [198]230628859629
(8082358)
107 Tage983610209 files changed, 776107
insertions(+), 483031 deletions(-)
2.6.25 [199]238109232484
(8396250)
83 Tage122439738 files changed, 777371
insertions(+), 404514 deletions(-)
¹ find . -type f -not -regex '\./\.git/.*' | wc -l
² find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l (find . -name *.[hcS] -not -regex '\./\.git.*' | xargs cat | wc -l)
³ git-log --no-merges --pretty=oneline v2.6.(x)..v2.6.(x+1) | wc -l
⁴ git diff --shortstat v2.6.(x)..v2.6.(x+1) | wc -l

[200]

Linux-Kernel herunterladen Neue Linux-Versionen sind über die in Amerika [201] und Europa [202] stationierten Server der Domain Kernel.org erhältlich; deren Inhalte spiegeln zahlreiche deutsche Mirror-Server [203], die neue Linux-Versionen meist bereits wenige Stunden nach deren Freigabe zum Download bereithalten. Als Linux-Anwender sollte man neue Linux-Treiber und -Kernel aber normalerweise nicht selbst herunterladen und installieren, sondern auf den Linux-Distributor vertrauen. (...mehr... [204])

Linux 2.6.25 bringt wieder reichlich Neuerungen für Linux-Anwender – je nach Zählweise vielleicht so viel wie keine andere Version der 2.6-Serie zuvor, denn die Zahl der während des 2.6.25-Entwicklungszyklus im Quellcodeverwaltungssystem durchgeführten Commits lag deutlich über dem bisherigen Rekordhalter Linux 2.6.24. Bei letztgenannter Version veränderten die Kernel-Entwickler allerdings durch die teilweise mit Hilfe von Skripten durchgeführten Zusammenlegung der i386- und x86_64-Verzeichnisse noch ein paar Zeilen Quellcode mehr als bei 2.6.25.

Die jetzt freigegeben Kernel-Version bringt allerdings nicht so viele herausragende Neuerungen wie manche der Vorversionen in der 2.6-Serie. Die Verbesserungen im WLAN-Bereich und das Fortschreiten der Ext4-Entwicklung sind wohl die, die langfristig am wichtigsten sein werden; viele andere Neuerungen sind aber ebenfalls durchaus von Wichtigkeit und teilweise überfällig. 2.6.24 [205] brachte da mit vielen neuen WLAN-Treibern [206], den nötigen Verbesserungen am CFS-Scheduler [207], den besseren Stromspartechniken [208] und anderen Verbesserungen noch mehr wichtige Neuerungen, die man im täglichen Einsatz spürt. Linux 2.6.24 zeigte Anfangs aber doch so einige Probleme, die manchen Anwendern und den Betreuern von Distributionskerneln einige Kopfschmerzen bereiteten – in den kommenden Wochen wird sich zeigen, ob die Kernel-Entwickler beim Kernel 2.6.25 ein besseres Händchen hatten.

[209]

Direkt nach der Freigabe von 2.6.25 beginnt nun die erste, zirka zwei Wochen lange Phase im Entwicklungszyklus [210] des Linux-Kernels, in der Torvalds die umfangreicheren Änderungen für die nächsten Version in die von ihm betreute Hauptentwicklungslinie des Linux-Kernels aufnimmt. Das könnte diesmal etwas flüssiger verlaufen als sonst, denn die Entwickler der verschieden Subsysteme stimmen in dem seit wenigen Wochen gepflegten Linux-next-Tree [211] ihre für die nächste Kernel-Version (also 2.6.26 in diesem Fall) geplanten Änderungen im Vorfeld aufeinander ab. Das hat sich laut Andrew Morton bereits positiv ausgewirkt; in der Endphase der 2.6.25-Entwicklung schrieb er [212], dass es (im Rahmen des mm-Entwicklerzweigs) deutlich weniger Merge-Konflikte und Kompilierfehler geben würde als in der selben Phase der 2.6.24-Entwicklung.

Entwicklungszyklus des Linux-Kernels Aufgrund des öffentlichen Entwicklungs-Prozesses (und mit einen tiefen Blick in den Kaffeesatz) ist heise Open ebenso wie der von der Linux-Foundation gewartete Radarschirm des Linux Weather Forecast [213] in der Lage abzuschätzen, welche größeren Neuerungen die nächste Kernel-Version enthalten dürfte. [...] (...mehr... [214])

Für 2.6.26 stehen erneut zahlreiche Änderungen für das WLAN-Subsystem und WLAN-Treiber bereit; die wichtigsten WLAN-Treiber bringt 2.6.25 nun aber mit, sodass 2.6.26 vor allem zahlreiche Detailverbesserungen mitbringen dürfte. Auch die ein oder andere im Realtime-Entwicklungszweig (RT-Tree [215]) getestete Verbesserung dürfte mit 2.6.26 Einzug in die Hauptentwicklungslinie finden, wie es ähnlich mit vorangegangene Kernel-Versionen immer der Fall war.

Besser als zum Start der 2.6.25-Entwicklung stehen die Chancen für eine Aufnahme des Kernel-Debugger KGDB [216]. Den hatte Ingo Molnar bereits in Linux 2.6.25 hieven wollen. Torvalds, der Kernel-Debugger von jeher kritisch gegenüber steht, ignorierte KGDB jedoch und äußerte scharfe Kritik [217] an Vorgehen von Molnar, KGDB über den Entwicklerzweig der x86-Architektur zur Integration anzubieten; Torvalds würde sich KGDB erst ansehen, wenn die Entwickler den Debugger über einen separaten Git-Tree zur Integration anbieten. Ein solcher wurde zwischenzeitlich aufgesetzt; zudem diskutierten die Entwickler über einige Details der Implementierung und überarbeiteten einige kritisierte Codeabschnitte erneut.

Mit 2.6.26 Einzug halten dürfte ein bereits während der 2.6.25-Entwicklung vorgenommene, dann jedoch teilweise wieder zurückgezogene Änderung [218], die Kernel-Modulen (egal ob Open- oder Closed-Source) den Zugriff auf ein zentrale für die Initialisierung des Speichersubsystems zuständige Funktion verwehrt, da Module an ihr nicht zu schaffen haben sollten. Diese Funktion nutzt neben dem Kernel-Modul von VirtualBox unter anderem auch das umstrittene Kernel-Modul der Nvidia-Grafiktreiber, sodass sich die Nvidia-Entwickler nach Alternativen umsehen müssen, damit der Treiber mit zukünftigen Kernel-Versionen zusammenarbeitet. Mit 2.6.26 wiederkommen könnte auch der Patch zur Unterstützung der PCI-Express-Stromspartechnik Active State Power Management (ASPM [219]) – ihn integrierten [220] die Entwickler zu Beginn des jetzt abgeschlossenen Entwicklungszyklus, entfernten [221] ihn aber schon wenig später aufgrund zahlreicher Probleme.

Wie üblich wird das regelmäßig in c't und unregelmäßig auf heise Open erscheine Kernel-Log [222] in den kommenden Wochen über die wichtigsten in die Hauptentwicklungslinie [223] von Linux integrierten Neuerungen und andere Entwicklungen im Umfeld des Linux-Kernels berichten. Dazu zählen auch neue Versionen der Stable-Kernel-Series [224] (2.6.x.y), die in den ersten Wochen nach der Veröffentlichung einer neuen Version der Hauptentwicklungslinie meist den ein oder anderen Fehler korrigieren, den die Kernel-Hacker und Tester zuvor nicht gefunden und korrigiert haben.

Ungefähr zum kalendarischen Sommeranfang dürften die Kernel-Entwickler dann die Linux-Version 2.6.26 freigeben, deren Änderungen dann wie üblich ein heise-Open-Artikel [225] wie dieser detailliert beschreiben wird. (thl [226]/c't)

[Anhang: Noch mehr Änderungen an Infrastruktur und Treibern. [227]]

Die im voranstehenden Artikel erwähnten Neuerungen der jüngsten Linux-Version stellen nur eine Auswahl der bedeutsamsten Änderungen dar – die sprichwörtliche Spitze des Eisbergs, der bei jeder neuen Linux-Version im Hauptentwicklungszweig aus Tausenden von eingepflegten Patches besteht. Zahlreiche weitere ebenfalls wichtige Neuerungen finden sich im folgenden als thematisch sortierte Aufzählung mit einer Kurzbeschreibung, die auf weitere Informationsquellen verlinkt.

Welche Treiber alle geändert wurden Über das Git-Web-Frontend auf Kernel.org lassen sich auch Informationen zu Änderungen an einzelnen Dateien des Linux-Kernels aufrufen – so kann man herausfinden, ob es Neuerungen an den auf dem eigenen System eingesetzten Treibern gab. Dazu muss man allerdings wissen, wo sich die Treiberdateien im Quellcodebaum des Linux-Kernels finden. Bei den zumeist stark auf Modulen setzenden Kerneln der Distributionen helfen häufig die Ausgaben des Programms modinfo: [VERBATIM0] Liegt ein kompiliertes Modul etwa in /lib/modules/[...]/kernel/drivers/net/e100.ko, dann findet sich dessen Sourcecode im Linux-Quellcode normalerweise im Verzeichnis drivers/net/ in Dateien mit ähnlichem Namen – etwa e100.c im Falle des für Intel-100-MBit-Netzwerkhardware zuständigen e100-Treibers. Andere Treiber, wie der e1000-Treiber für Intels PCI-Gigabit-LAN-Chips, haben hingegen ein Verzeichnis für sich alleine. Kennt man die ungefähre Position, navigiert man im Git-Webinterface über die Tree-Ansicht [228] zu den jeweiligen Quellcode-Dateien und ruft über den Link history eine Übersicht über die jüngsten Änderungen an Dateien oder Verzeichnissen auf. Im Verzeichnis für die Netzwerktreiber [229] lassen sich so beispielsweise die Anpassungen am Treiber-Code von e100 [230] (drivers/net/e100.c) und e1000 [231] (drivers/net/e1000/) anzeigen.

Architektur-Code:

Dateisysteme und VFS (Virtual File System):

Stromspartechniken und ACPI (Advanced Configuration and Power Interface):

Notebook- und PDA-spezifische Treiber:

PCI-Subsystem:

USB-Subsystem:

Input-Subsystem (Eingabegeräte wie Tastatur und Maus):

Storage

Netzwerk:

Grafikhardware:

Audio:

Hardware-Monitoring/I2C:

V4l/DVB:

Verschiedenes:

Eine dieser Auflistung ähnlichen Überblick sowie eine Kurzbeschreibung der wichtigsten Änderungen von 2.6.25 pflegen auch die Kernelnewbies in ihrem Wiki [370]. Wer es noch detaillierter wissen möchte, durchkämmt das mehrere Megabyte große Changelog [371], das die zu jedem einzelnen Commit im Quellcode-Verwaltungssystem gehörenden Patch-Kommentare enthält. Alternativ kann man sich auch im Git-Webinterface [372] durch die Kernel-Quellen und deren jüngste Änderungen arbeiten; dort stehen auch die Patches selbst zum Ansehen oder Herunterladen bereit. (thl [373]/c't) (thl [374])


URL dieses Artikels:
https://www.heise.de/-221493

Links in diesem Artikel:
[1] https://www.heise.de/glossar/entry/Linux-Kernel-Serien-und-Entwicklungslinien-397913.html
[2] https://www.heise.de/glossar/entry/Linux-Kernel-Serien-und-Entwicklungslinien-397913.html
[3] http://www.eu.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.25
[4] http://www.heise.de/open/artikel/105532/1
[5] http://www.heise.de/open/artikel/105532/1#ext4
[6] http://www.heise.de/open/artikel/105532/1#cfs
[7] http://www.heise.de/open/artikel/105532/2
[8] http://www.heise.de/open/artikel/105532/2#zusammenlegung
[9] http://www.heise.de/open/artikel/105532/2#smack
[10] http://www.heise.de/open/artikel/105532/2#virt
[11] http://www.heise.de/open/artikel/105532/3
[12] http://www.heise.de/open/artikel/105532/3#reinraus
[13] http://www.heise.de/open/artikel/105532/4
[14] http://www.heise.de/open/artikel/105532/5
[15] http://www.heise.de/open/artikel/105532/5#fazit
[16] http://www.heise.de/open/artikel/105532/5#trends
[17] http://www.heise.de/open/artikel/105532/6
[18] http://www.heise.de/glossar/entry/Linux-Kernel-und-Treiber-herunterladen-und-installieren-397911.html
[19] https://www.heise.de/glossar/entry/Entwicklungszyklus-des-Linux-Kernels-397915.html
[20] https://www.heise.de/glossar/entry/Linux-Kernel-Serien-und-Entwicklungslinien-397913.html
[21] 
[22] http://www.heise.de/open/artikel/100782/1
[23] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fa1c114fdaa605496045e56c42d0c8aa4c139e57
[24] http://madwifi.org/wiki/About/ath5k
[25] http://madwifi.org/
[26] https://www.heise.de/glossar/entry/Linux-Kernel-Serien-und-Entwicklungslinien-397913.html
[27] http://madwifi.org/wiki/About/HAL
[28] https://www.heise.de/news/Linux-WLAN-ath5k-loest-langfristig-MadWifi-ab-177887.html
[29] https://www.heise.de/news/Linux-WLAN-ath5k-loest-langfristig-MadWifi-ab-177887.html
[30] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f653211197f3841f383fa9757ef8ce182c6cf627
[31] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blobdiff;f=drivers/net/wireless/Kconfig;h=f372960904b21a6d7364a8e5e70785878290341e;hp=50a8b6c2fa00aa70ec6677e0dbcbfc706a6a076e;hb=f653211197f3841f383fa9757ef8ce182c6cf627;hpb=fa1c114fdaa605496045e56c42d0c8aa4c139e57
[32] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=09dde54c6a69d4f9ea1213923b93aeae7020f8b6
[33] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=589866f9f1cb14273b644993d362ec7845007f94
[34] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bf164cc054d568fa7889ffab41d3b091f5758c75
[35] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bf164cc054d568fa7889ffab41d3b091f5758c75
[36] https://www.heise.de/tests/Die-Neuerungen-von-Linux-2-6-22-222117.html
[37] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=459c51ad6e1fc19e91a53798358433d3c08cd09d
[38] http://www.linuxwireless.org/en/users/Drivers/zd1211rw/devices
[39] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=03ac7a8141e1613add92d42e389a35a126b1caf8
[40] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6b4e324164c683a7b4c1bd0be4d85f9a5a0f0e90
[41] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=10816d40f2e9500057cb46d7608a362a1d10bb9b
[42] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c715350828b12ce3b29e655fec7a7d6b22245d00
[43] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9f985b0eee4070e494b9d62313da982cfef9b5e3
[44] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d3c990fb26b78f60614885d9ecaf7b7686b7b098
[45] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fd4c7f2fce1737105208c564e1458c885918982d
[46] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9e0cc6de99792151b16dbd622b11ba6607a85b72
[47] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=270243a50574455f593378377c0fa74284730f7d
[48] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9ee1ba474fc37bcaf6a958bf7e995006fc69893b
[49] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=326eeee807ca7ed4489cb21d4ebe8e52079c11c3
[50] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8fb8803239debda77b90f7e4a5098067187d865e
[51] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fd105e79d19439d29a6561178fb5fe511e141f6b
[52] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=67d620357a186adc0f4e7d1f5b095ea2c77e7072
[53] 
[54] http://www.bullopensource.org/ext4/
[55] https://www.heise.de/tests/Die-wichtigsten-Neuerungen-von-Linux-2-6-19-222007.html
[56] https://www.heise.de/news/Linux-Dateisystem-ext4-im-Kernel-2-6-19-170659.html
[57] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3dbd0ede4d5320bd4c3cb914fec0595135b6d9a1
[58] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=818d276ceb83aa9fdebb5e0a53188290312de987
[59] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8180a5627d126362c2f64e4fa886d6f608d9632a
[60] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=afc7cbca5bfd556c3e12d3acefbee5ab0cbd4670
[61] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0fc1b451471dfc3cabd6e99ef441df9804616e63
[62] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=25ec56b518257a56d2ff41a941d288e4b5ff9488
[63] http://thread.gmane.org/gmane.linux.kernel/627656
[64] https://www.heise.de/news/Funktionsumfang-der-Linux-Distribution-Fedora-9-mit-erster-Beta-komplett-191885.html
[65] http://fedoraproject.org/wiki/FedoraExt4
[66] http://thread.gmane.org/gmane.linux.kernel/627656
[67] 
[68] https://www.heise.de/tests/Die-Neuerungen-von-Linux-2-6-23-222157.html
[69] https://www.heise.de/tests/Die-Neuerungen-von-Linux-2-6-23-222157.html
[70] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6f505b16425a51270058e4a93441fe64de3dd435
[71] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e8fa136262e1121288bb93befe2295928ffd240d
[72] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2de0b4639f4b1b6bfe31f795e5855f041f177170
[73] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=052f1dc7eb02300b05170ae341ccd03b76207778
[74] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8f4d37ec073c17e2d4aa8851df5837d798606d6f
[75] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=93f992ccc008dd4030381caeebb252e85e66684b
[76] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=58e2d4ca581167c2a079f4ee02be2f0bc52e8729
[77] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ec2c507fe8c8fa3c04fc6cb99a382a965c477379
[78] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6b2d7700266b9402e12824e11e0099ae6a4a6a79
[79] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9745512ce79de686df354dc70a8d1a74d801892d
[80] https://www.heise.de/news/Linux-Programm-spuert-Latenzzeiten-nach-181764.html
[81] http://www.latencytop.org/
[82] http://www.lesswatts.org/projects/powertop/
[83] 
[84] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=b4ce92775c2e7ff9cf79cca4e0a19c8c5fd6287b
[85] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f1dd9c379cac7d5a76259e7dffcd5f8edc697d17
[86] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d156042f9fdffcb0171dc20f0d8b6df3fbf779c4
[87] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ec4dd3eb35759f9fbeb5c1abb01403b2fde64cc9
[88] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=304daa8132a95e998b6716d4b7bd8bd76aa152b2
[89] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=161f47bf41c5ece90ac53cbb6a4cb9bf74ce0ef6
[90] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=85863e475e59afb027b0113290e3796ee6020b7d
[91] http://lwn.net/Articles/230975/
[92] http://rt.wiki.kernel.org/
[93] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e260be673a15b6125068270e0216a3bfbfc12f87
[94] http://lwn.net/Articles/253651/
[95] http://www.unfug.org/data/foils/ws0708/rt_linux.pdf
[96] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=314cdbefd1fd0a7acf3780e9628465b77ea6a836
[97] http://lwn.net/Articles/267968/
[98] http://de.wikipedia.org/wiki/Spinlock
[99] 
[100] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-2-6-24-221423.html
[101] http://www.heise.de/open/artikel/100782/3
[102] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=edfaa7c36574f1bf09c65ad602412db9da5f96bf
[103] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=af5ca3f4ec5cc4432a42a73b050dd8898ce8fd00
[104] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=history;f=Documentation;hb=HEAD
[105] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=Documentation;hb=HEAD
[106] http://rick.vanrein.org/linux/badram/
[107] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1312848e92a0686cb5124aa86ea58d55ba795742
[108] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/kernel-parameters.txt;hb=HEAD
[109] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a36219ac93b3fd029f5e800642226c57796c152f
[110] 
[111] http://schaufler-ca.com/
[112] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e114e473771c848c3cfec05f0123e70f1cdbdc99
[113] http://de.wikipedia.org/wiki/Mandatory_Access_Control
[114] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5b83683f32b113d07edfb67a33ce389fc624423d
[115] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=de18c850af701ac9512b7239e88fa45e4c168771
[116] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9ad65e4748f55e3159283d7fa9d54fb30c086113
[117] http://de.wikipedia.org/wiki/Extensible_Firmware_Interface
[118] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b02aae9cf52956dfe1bec73f77f81a3d05d3902b
[119] http://thread.gmane.org/gmane.linux.kernel/621356
[120] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=585cf17561d3174a745bec49c422c1a621c95fc4
[121] http://www.linuxdevices.com/news/NS5637467946.html
[122] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c773633916c66f8362ca01983d97bd33e35b743f
[123] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0d66548a10cbbe0ef256852d63d30603f0f73f9b
[124] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c18ce101f2e47d97ace125033e2896895a6db3dd
[125] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ffd980f976e7fd666c2e61bf8ab35107efd11828
[126] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ccb29637991fa6b8321a80c2320a71e379aea962
[127] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f7ab97f78a5c573e49474edbd260ea6898ddccda
[128] http://lwn.net/Articles/253425/
[129] http://de.wikipedia.org/wiki/Controller_Area_Network
[130] 
[131] http://kvm.qumranet.com/
[132] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=aca7f96600b170e470b3056aba0ed8d7df8d330d
[133] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d77a25074a8f845401f0eb786ebb8996e45d9e22
[134] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b284be576471b1521dd04c0845beedb790cbb9d7
[135] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b93463aa59d67b21b4921e30bd5c5dcc7c35ffbd
[136] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ad312c7c79f781c822e37effe41307503a2bb85b
[137] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8a7ae055f3533b520401c170ac55e30628b34df5
[138] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3343660d8c62c6b00b2f15324ef3fcb6be207bfa
[139] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6b35e40767c6c1ac783330109ae8e0c09ea6bc82
[140] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=42d545c9a4c0d3faeab658a40165c3da2dda91b2
[141] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8cdea7c05454260c0d4d83503949c358eb131d17
[142] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e552b6617067ab785256dcec5ca29eeea981aacb
[143] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/controllers/memory.txt;hb=168c9e70f2172e408514b643c2282a6c87744b24
[144] http://lwn.net/Articles/243795/
[145] http://www.heise.de/open/artikel/105532/2
[146] 
[147] http://www.heise.de/open/artikel/105532/6
[148] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary
[149] http://git.or.cz/
[150] http://www.heise.de/open/news/meldung/102914
[151] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=782e70c6fc2290a0395850e8e02583b8b62264d8
[152] https://www.heise.de/tests/Die-wichtigsten-Neuerungen-von-Linux-2-6-16-221909.html
[153] 
[154] https://www.heise.de/news/Kernel-Log-Ndiswrapper-in-2-6-25-rc4-wieder-voll-funktionsfaehig-187754.html
[155] https://www.heise.de/news/Kernel-Log-ACPI-DSDT-Patch-flog-aus-dem-Kernel-Fortschritte-bei-offenen-Grafiktreibern-190847.html
[156] https://www.heise.de/news/Kernel-Log-ACPI-DSDT-Patch-flog-aus-dem-Kernel-Fortschritte-bei-offenen-Grafiktreibern-190847.html
[157] http://www.heise.de/open/artikel/105532/6
[158] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=00f5970193e22c48f399a2430635d6416b51befe
[159] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=60e233172eabdd1f831bd48631b9626ce2279d9b
[160] http://mailman.alsa-project.org/main/index.php/Changes_v1.0.15_v1.0.16
[161] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b995d76da070440c1e5687c0c13c8fbe51222ea2
[162] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d0ce9946c52e7bdf95afb09553775cf28b752254
[163] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f6a92248aef841f14a5806cc299c431e7809c733
[164] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9b35947fcd697001332d0bb2adf6fbc419f5dd4f
[165] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e1f0d6690817d1296161094106b23a0be9ee6ca0
[166] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e035b841015251062316cb60b47d1f11d2703f6d
[167] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6b8d6e5518e2812b150c2d7c1e975a1bd33f0ccc
[168] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d9f9b8baa0fbdba93b0ebb8e5b3ec042a6b4a8fb
[169] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bba8dee78218752c6457d0dac9f5faa17755ac95
[170] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4444704cdcd44bb3534ead01d3318f0db858cb9f
[171] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ba8bbcf6ff4650712f64c0ef61139c73898e2165
[172] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3d5e2c13b13468f5eb2ac9323690af7e17f195fe
[173] http://airlied.livejournal.com/58224.html
[174] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=681c739944018d80dbcf7f19997eba97676c7116
[175] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=68370cf94e2511aeda3b7cb8490692570a8c9dab
[176] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=07b4a835d42d6d59e84cbafdc8b7090f97d7b67a
[177] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b00fff0be5655614bb18a4b1d6e33b27c56c6f7e
[178] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=29a7b4cb44336a8ef85cb1d283dc6efd4cf0fa12
[179] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6a0a962cbc2c52fad556692eabda563a01c9966c
[180] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=83bad1d764b836a482b88e0a1f44d7a5c3e1fee0
[181] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=edae58ead57319b0bcf16e48a32365145c7bf0b7
[182] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=003faaa17793c478ed2babc56a618396e0ef96c2
[183] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d28dc711217a2d5cafb64ec4e33a469b01376d91
[184] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=16ad1ad9cbce153f4bfed22f9b9a6db4ae212fc7
[185] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bf7f22b9cac74a1e3d8b8e77350db2baca2c35be
[186] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a2fbb9ea235467b0be6db3cec0132b6c83c0b9fb
[187] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3ec9c11da03342b556f11724ea005e60160bc744
[188] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=099dc4fb62653f6019d78db55fba7a18ef02d65b
[189] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=baf8532a147d5b76681ce040e2c8f25a3f0e718d
[190] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=60fdd931d577fcca351930fda4cde26ce07d35af
[191] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3c2d774cad5bf4fad576363da77870e9e6530b7a
[192] http://www.heise.de/open/news/meldung/103905
[193] http://www.heise.de/open/news/meldung/103995
[194] https://www.heise.de/tests/Die-wichtigsten-Neuerungen-von-Linux-2-6-20-222041.html
[195] https://www.heise.de/tests/Die-Neuerungen-von-Linux-2-6-21-222087.html
[196] https://www.heise.de/tests/Die-Neuerungen-von-Linux-2-6-22-222117.html
[197] https://www.heise.de/tests/Die-Neuerungen-von-Linux-2-6-23-222157.html
[198] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-2-6-24-221423.html
[199] https://www.heise.de/hintergrund/Verbesserungen-allerorten-Die-Neuerungen-von-Linux-2-6-25-221493.html
[200] 
[201] http://www.kernel.org/
[202] http://www.eu.kernel.org/
[203] http://kernel.org/mirrors/
[204] http://www.heise.de/glossar/entry/Linux-Kernel-und-Treiber-herunterladen-und-installieren-397911.html
[205] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-2-6-24-221423.html
[206] http://www.heise.de/open/artikel/100782/1
[207] http://www.heise.de/open/artikel/100782/1#cfs
[208] http://www.heise.de/open/artikel/100782/2
[209] 
[210] https://www.heise.de/glossar/entry/Entwicklungszyklus-des-Linux-Kernels-397915.html
[211] http://www.heise.de/open/news/meldung/103425
[212] http://thread.gmane.org/gmane.linux.kernel/657470/focus=657495
[213] http://www.linux-foundation.org/en/Linux_Weather_Forecast
[214] https://www.heise.de/glossar/entry/Entwicklungszyklus-des-Linux-Kernels-397915.html
[215] http://rt.wiki.kernel.org/
[216] http://kgdb.linsyssoft.com/
[217] http://thread.gmane.org/gmane.linux.kernel/631544/focus=634566
[218] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=757265b8c57bb8fd91785d3d1a87fb483c86c9c2
[219] http://www.lesswatts.org/projects/devices-power-management/pcie.php
[220] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6c723d5bd89f03fc3ef627d50f89ade054d2ee3b
[221] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cc3a1378b4dd45d3e78dd4aeb10641b06a87d614
[222] http://www.heise.de/glossar/entry/Kernel-Log-397909.html
[223] https://www.heise.de/glossar/entry/Linux-Kernel-Serien-und-Entwicklungslinien-397913.html
[224] https://www.heise.de/glossar/entry/Linux-Kernel-Serien-und-Entwicklungslinien-397913.html
[225] http://www.heise.de/open/artikel/archiv/
[226] mailto:thl@heiseopen.de
[227] http://www.heise.de/open/artikel/105532/6
[228] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree
[229] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=drivers/net;hb=HEAD
[230] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=history;f=drivers/net/e100.c;hb=HEAD
[231] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=history;f=drivers/net/e1000;hb=HEAD
[232] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cc503c1b43e002e3f1fed70f46d947e2bf349bb6
[233] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c1d171a002942ea2d93b4fbd0c9583c56fce0772
[234] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f212ec4b7b4d84290f12c9c0416cdea283bf5f40
[235] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7b83dae7aa31db4f6d6e78c3c6d490a7ac58699c
[236] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fa20efd2fcd9349770113c6f72fc76ce437b62f5
[237] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ddb25f9ac1c4b4f9ba0bdacd7850a921a0c6886c
[238] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9566e91d494ed0668edf88f852de7f251fe8fe9a
[239] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=438ff3f3cc33833206a48492e9d6674e4e82bed8
[240] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=035e111f9a9b29843bc899f03d56f19d94bebb53
[241] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=58d083192825c5fbd46fa0b1ff4d1ecc9118b692
[242] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b920de1b77b72ca9432ac3f97edb26541e65e5dd
[243] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9858ee8ac52117cb38d7ef79b4db3382ea465a2a
[244] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1cade99497c881a8c719df561d1bdc96831ff040
[245] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a4da2e3ec84cda635ac441efbe781a38d2ee41ee
[246] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ef141a0bb0dc6172bb8fe5408cf8adbd5f76ff45
[247] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=781749a46b34dc5c9e4000df7b9d37d675c17463
[248] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c42f3ad7f1bf17f31c3febdc71034ed6d793d40f
[249] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=97837582bc1e191d2792af74c1f3762ed01243b9
[250] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6d5ae0deb1641bf615eafd8fef64218e10cb2fd0
[251] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e6ab15827eec0bc4444421f7ccf0223de321c708
[252] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d659072f736837e56b6433d58e5315ad1d4d5ccf
[253] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7909f2bf835376a20d6dbf853eb459a27566eba2
[254] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0e7d56e3d9d7e37c79d0e05ffb3994e34beb3bbc
[255] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ce2b7147bb83b7d729b17c1638f092a1bcba4981
[256] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=25de5718356e264820625600a9edca1df5ff26f8
[257] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fe8e288a63f2f3c51c288500282d0eb5cd26a534
[258] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=203d3d4aa482339b4816f131f713e1b8ee37f6dd
[259] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9ee85241fdaab358dff1d8647f20a478cfa512a1
[260] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6c9cda78b4f1fb89b0b6b8c03ce55dbdf0b1bdef
[261] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=535ae38c9f4025faadedd17fac5f11e79e1cfdb2
[262] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=745a5d2126926808295742932d0e36d485efa485
[263] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bff431e49ff531a343fbb2b4426e313000844f32
[264] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=31e0729a85c1e8ffaf4d14b4c201c28b5d1c9585
[265] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=88877c2a2ebd0e554496efb23e7dc8ade661d289
[266] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d0788cfbae0eddf13d5f2591acb1b407ba041d71
[267] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6c231bd5eb07ce546517019f334652b9ecfc329a
[268] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=083f17606f624c79555e313d87cf37ac1486b073
[269] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d1edb2b5f1d016d679600cccf2716e0134fff917
[270] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fe04f22fd2bc84dfcc0ef1c7acb863bd98b9ac93
[271] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cc0573b3250214034062ddf8c64359596d8af521
[272] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=cec035de8265b18252742ef359b12e9694641112
[273] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d39a7a63eb3971b1b3cc5c181ed526bf437b1c72
[274] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=08e7a7d27d71e92305980033ec03c0a86b3efb2d
[275] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1ec87280ebfdf5ea07a3ce7b235bebdb9ab42572
[276] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=25a010c8c1a5f0cc2e2794adf969e2df2ad1f0b6
[277] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0e1763f530af71bd82e58e407991a9ded6aae73e
[278] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5906a0448208024d140e1ee0e65f9168a405fb94
[279] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8dcd5afabffe7c7428323b6f083c2ec70129b459
[280] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c80e5ffac0579499ca28444155118ffcdd9b8d7e
[281] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=85c985f46059107c4f4bf5f9e7807dbb646595db
[282] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=70d562cf7853ea1bb53c1007075c5df958f11c90
[283] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c40e7cb89f9d36924131ef708ff1f16a76611add
[284] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=931506d3b2208362efc678ee863ee42a90755e89
[285] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3606a380692cf958355a40fc1aa336800c17baf1
[286] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=138bfdd03f2c08cc62b6af3900fb7be1c696315b
[287] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b832548773b0cd98216534caa31b9ed7607c4e76
[288] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5e8f757cb2e0f67bf43f71d5180a8bf0ab3484eb
[289] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5e8f757cb2e0f67bf43f71d5180a8bf0ab3484eb
[290] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7585eb1b7cf4bbace37ce18500809140c8eeccc3
[291] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2952755ce364b81f904b49397f6b0004dead2c9f
[292] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ade2daf9c6e57845fe83a24e0a9fa1c03c6e91b1
[293] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6f9a35e2dafa0f855ab051c11bdbf739745ff6f5
[294] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b5762948263dd5e9725a380e7a9626f99e40ae9d
[295] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8f261aaf9be5c1246013cf6a65b98586d24832a5
[296] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1e6c38cec08f88b0df88a34e80f15492cace74e9
[297] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1237c98db2aa94b42dbb9fb1df062b7d3733dc83
[298] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=caa1e8c32131201193fc4711f5b07a36d3d941df
[299] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a2c6ef71364e3c7e7509d1bf0e61e8b853744190
[300] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=864a4675b239dcc3ae5b8adce15a370639b5ccab
[301] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0e53c2be0495afa97c6b0d06397adcbff9c65347
[302] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=34e8beac92c27d292938065f8375842d2840767c
[303] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=28f39d553ee242000e62f6c589ee3dc6de3f9aaa
[304] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ea5c48ab2a76559d4af39e1f7de137c0851ac0a5
[305] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6f2576af5ba5913538fda7dfb7c6a17771025477
[306] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=882c49164d72c45f37d7fa1bb3de7c31cf1a5fab
[307] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9232951ada7ec2f2c1424e4c024dc8540ae97e91
[308] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4600c9d74e23b5696acf66a36ce5f2cfbcdecc6c
[309] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=05a7d22b9f02e7fe8fb5ff972b46743948139b3c
[310] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2b91213064bd882c3adf35f028c6d12fab3269ec
[311] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=097c2aa89f22f55db19fd0f72aede460bcb61f29
[312] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=03157ac31eb4a8883382a212b161d2e6c5059fbf
[313] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7a47dd7a2f178cc4e87d584b0469eef4b58b7aea
[314] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=efb90e43ffee4045efe76de90773c4a5963515a3
[315] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3c2d774cad5bf4fad576363da77870e9e6530b7a
[316] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=110d0ef9907b519fed1607c73b3ae883f270561e
[317] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5d08cd1dfdc57dc834c47eb9f023fcf861f3d6bf
[318] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bb8c093bdea62f2ae371b98ebff81b0407852faf
[319] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c8b0e6e19c0bcd30689cb6c6f64eb140f5d61894
[320] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=387e100ac24a6c8f2b6f4ce572098447d2893008
[321] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1a17582e64dcc690a7edcd7dcf6fe89f1aa0ef97
[322] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1682fe6de206bd1e937529cbb393915e5ea40b2c
[323] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=db433febbadaf1fa9862fb5068b119be1d312d76
[324] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=269fca0eddfa37d10c4493ac402be11e866e43fd
[325] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=eb189d8bc9824bcb2187ffdab27d77ab469264c3
[326] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ab91d346c82e794e9dce29cf4fda067b4961ca64
[327] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5dfdaf58d61f06a458529430c24b1191ea4d1a27
[328] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e8cbb4cbeb7642d179b01c35adf036ddb65f3dd0
[329] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ece8edddf067d21c4e5abfe3f1205da1588edbb2
[330] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=68e0d42f39d85b334d3867a4e5fc2e0e775c1a6c
[331] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=60f92683943c5b7a85963b283d6f8a853aa09203
[332] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f9e9716a67fbea4594749bf1022fdfd0b96099db
[333] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=feac7af508ebdfe1db9920d4e45d0ffd286abe75
[334] http://git.kernel.org/git/?p=3Dlinux/kernel/git/torvalds/li=
[335] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5f5f9d4c7bf96c044fb98c7c107172a730b2a247
[336] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9119f85a0cdbac0397b39fa198866bf530cfab8b
[337] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4e8b6e25943a22036a6b704ebef634c7dec4c10e
[338] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1cac5004e953506166e980da5776d5cc1c176d79
[339] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2134ea4f37d36addbe86d4901f6c67a22a5db006
[340] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f889fa91ad47e6fcb530abf1184ca9f1473d3c72
[341] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f7278fd0a57ea6cde4988ab820851b01be20daef
[342] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9b1fffddc80949fb4aa93fdcc57544bc2108ced3
[343] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2797f724cdde5b3c630f6422a1cc3a21772728dd
[344] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=27da183402ac5ca7d5a4c4704c4a405cd1009c43
[345] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4979bca9dcfe4c21c26f378ce446c912fc583ac1
[346] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5aba4f8ec72b2b880c694b5ce58e67be508f7b7a
[347] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=175859bf1602c7ee38d720daa14a287072cc2b72
[348] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=17467f23395f05ba7b361f7b504fe0f1095d5bb7
[349] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e5723b41abe559bafc52591dcf8ee19cc131d3a1
[350] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6369a2887a1b35fde91573adc650528e3efea8e9
[351] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7f4da4745c34287938ce76b92b23409adeecb5b8
[352] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=85f03bccd6e0e2ac6ccf017d4bcd5d74bb87a671
[353] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0d227a7e724460bddcd603a1feb672267bcb0d6c
[354] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=eee87d3196c9a7ac3422f4298e2250ca68d791c1
[355] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=728b92a2301c705dc36419ab0e7163b129462696
[356] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=29e4e05041842bca57ec539e51cfeae8948e7320
[357] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c0e0aff9779303c7e3ef7e6db4001dbc2bfdcbdd
[358] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=71c044752cdae89136862495f244d37073e2cf66
[359] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=67053a409af94ac3d67e0ef0651c42c8c10f5394
[360] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c7637b1a31bb0470e1247f1923a323c90927ac37
[361] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fdef464a7fdcc0f5905d380b2065fec7715bc95d
[362] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e2a1774d9c8b866db65853fd1a17e5f472dd5cf2
[363] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=166fb6b4721f9dd8eca3755517671154aa1eaaba
[364] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8ff12cfc009a2a38d87fa7058226fe197bb2696f
[365] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e3a4ea4fd2e5f154ae9233f1ce30e7564e5cbcfc
[366] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0b77abb3b2d0c2eee1da79a3f3bd4312a0edb156
[367] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=28db8e3e38e593d22e2c69942bb1ca7be2a35f05
[368] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=abe8be3abe4c2043bd766f32d7eba62c12dbb0b3
[369] http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d20894a23708c2af75966534f8e4dedb46d48db2
[370] http://kernelnewbies.org/Linux_2_6_25
[371] http://www.eu.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.25
[372] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary
[373] mailto:thl@heiseopen.de
[374] mailto:thl@ct.de