Kernel-Log – Was 2.6.29 bringt (3): ACPI, PCI, PM und Co. – Verbesserungen für Notebooks und Stromspartechniken
Durch Verbesserungen am ACPI- und PCI-Code sollen Suspend-Modi nun zuverlässiger arbeiten; manuelles Throttling mit p4-clockmod wird unterbunden; neue oder erweiterte Treiber für Notebooks von Asus, Dell, Fujitsu-Siemens und IBM/Lenovo
- Thorsten Leemhuis
Nach einer durch die LCA 2009 bedingten Pause von einer Woche hat Linus Torvalds die Aufnahme von Patches in den Entwicklerzweig vor ein paar Tagen wieder aufgenommen und die dritte Vorabversion von 2.6.29 veröffentlicht. In der Mail zur Freigabe weist Torvalds auf einige Änderungen hin, die die Zuverlässigkeit der System-Suspend-Modi verbessern sollen – durch diese Änderungen würde eines seiner Notebooks nun zuverlässig aus dem Stromsparmodus wieder aufwachen. Dies "Was 2.6.29 bringt"-Kernel-Log nimmt das zum Anlass, um die für 2.6.29 erwarteten Änderungen rund um ACPI, PCI, Power-Management und die damit verzahnten Notebook-Treiber zu beschreiben.
Reinitialisiert
Die von Torvalds erwähnten und im wesentlichen von Rafael J. Wysocki entwickelten Änderungen rund um das Suspend- und Resume-Handling fanden nicht in einem Schwung, sondern nach und nach über die Verwalter der ACPI- und PCI-Subsysteme den Weg in den Kernel (1, 2). Die Commits sind zudem zumeist vergleichsweise klein und auf den ersten Blick recht unscheinbar (etwa 1, 2, 3, 4).
Durch diese schon seit langem vorbereitete Änderungen soll der Kernel in Zukunft die PCI(e)-Hardware des Systems beim Aufwachen aus dem Suspend-Modus zuverlässig reinitialisieren; bisher hätte Suspend und Resume laut Torvalds zwar auf vielen Systemen funktioniert, aufgrund von Interrupt-Timing-Problemen speziell bei Shared-Interrupts nicht immer verlässlich gearbeitet ("We have historically been in a situation where suspend/resume often works, but may not be reliable due to interrupt timings, especially if there are any shared interrupts going on between drivers."). Nachdem diese Schwierigkeiten nun ausgeräumt sein sollen, zeigt sich Torvalds verstärkt an Berichten von Anwender interessiert, bei denen nun noch Treiber zu Problemen beim Suspend/Resume führen; Tester sollen zudem prüfen, ob Systeme, bei denen die System-Schlafzustände mit älteren Kerneln arbeiteten, mit den Vorabversionen von 2.6.29 noch mindestens ebenso gut arbeiten wie zuvor ("[...]we'll really need user feedback on any drivers that now don't suspend/resume cleanly. So please, people - especially if you use suspend/resume, we want to hear about regressions, [...]").
Manuelles Throttling unterbunden
Die Kernel-Entwickler Matthew Garrett und Dave Jones haben in ihren Blogs und anderen Stellen schon mehrfach dargelegt, dass Throttling ("Drosseln") bei modernen CPUs nur zum Schutz vor Überhitzung dient, nicht aber wie allgemein angenommen die Taktfrequenz senkt oder die Leistungsaufnahme reduziert. Im Gegenteil, die Gesamt-Leistungsaufnahme zum Bewältigen einer Berechnung steige bei durch CPU-Throttling sogar, da die CPU nicht in den Stromsparmodus wechseln könne und das System mit all seinen anderen stetig Leistung umsetzenden Komponenten länger für die Berechnungen braucht.
Um das den Anwendern zu verdeutlichen, haben die beiden das Sysfs-Interface des Treibers p4-clockmod entfernt; der Treiber kann so zwar noch den Hitzeschutz übernehmen, bietet aber keine Möglichkeit zum manuellen Bremsen der CPU mehr. Der Commit-Kommentar sowie ein Eintrag im Blog von Dave Jones erklären noch einmal die Gründe dafür; weitere finden sich in den Kommentaren des Blog-Eintrags, wo der Entwickler das Vorgehen verteidigt und weiter versucht, Mythen rund um Throttling aus der Welt zu schaffen.
Kernel-Log – Was 2.6.29 bringt Weitere Teile aus der Kernel-Log-Mini-Serie "Was 2.6.29 bringt": 1. Netzwerk – "Mistige" WLAN-Treiber, Wimax- und AP-Unterstützung 2. Grafik – Kernel verwaltet Bildschirmauflösung Der Artikel "Höher und weiter – Die Neuerungen von Linux 2.6.28" bietet eine Übersicht über die Neuerungen der derzeit aktuellen Kernel-Version der Hauptentwicklungslinie. Das bei der Freigabe dieses Artikels neueste reguläre Kernel-Log beschäftigt sich mit den neuen Stable-Kerneln wie Linux 2.6.28.2, Mesa 7.3, neuen Grafiktreibern sowie einigen für eine Aufnahme mit Linux 2.6.30 diskutierten Patches; zahlreiche weitere Geschehnisse rund um den Linux-Kernel und andere Hardware-nahe Linux-Software kurz Erwähnung. Ältere Kernel-Logs finden sich über das Archiv oder die Suchfunktion von heise open. |
Die Kernel-Entwickler haben ferner einige der beim Booten ausgegebenen Informationen zur PCI-Konfiguration überarbeitet, um sie verständlicher und übersichtlicher zu gestalten (1, 2). Im ACPI-Code gab es zahlreiche größere Umbauarbeiten, die etwa die Include-Dateien umstrukturieren (1, 2) oder die ACPI Component Architecture (ACPICA) in ein eigenes Verzeichnis auslagern.
Neue Treiber für Notebooks
Die weitgehend Hersteller-spezifischen Treiber für Notebooks von Acer, Asus, IBM/Lenovo, MSI und anderen verschob der Betreuer des ACPI-Subsystems von drivers/misc/ nach drivers/platform/x86/, sodass man sie bei der Konfiguration von 2.6.29 mit einer Konfigurationsdateien von älteren Kerneln unter Umständen erneut aktivieren muss (1, 2). Der Treiber i8k für Dell-Notebooks unterstützt jetzt die Serien Vostro und Precision; neu dabei ist der Treiber dell-laptop, der die Helligkeitsregelung und Abfrage des WLAN-Schalter über Dcdbas (Dell Systems Management Base Driver) unterstützt. Ferner erweiterten die Entwickler den für Fujitsu-Siemens-Notebooks geeigneten Treiber fujitsu-laptop um einige neue Funktionen. Auch am Treiber für Thinkpads von IBM und Lenovo gab es zahlreiche Verbesserungen – die finden sich zusammen mit einer Auswahl weiterer wichtiger Änderungen aus dem ACPI-, PCI- und Power-Manager-Bereich in den folgenden Abschnitten:
ACPI:
- ACPICA: Add a mechanism to escape infinite AML While() loops
- ACPICA: Add Buffer-String conversion for predefined methods
- ACPICA: Add support to externally execute _OSI method
- ACPICA: Emit warning if two FACS or DSDT tables found in the FADT
- ACPICA: Move all public H/W interfaces to new hwxface
- ACPICA: New: acpi_get_gpe_device interface
- ACPICA: New: Public GPE group enable/disable interfaces
- ACPICA: Optimize execution of AML While loops
- ACPICA: Update version to 20081204.
- ACPI: disable MPS when NO APIC-table found
- ACPI: EC: Add some basic check for ECDT data
- ACPI: main.c: use new public GPE group enable/disable interfaces
- ACPI: Use RSDT instead of XSDT by adding boot option of "acpi=rsdt"
- ACPI hibernate: Add a mechanism to save/restore ACPI NVS memory
- ACPI hibernate: Introduce new kernel parameter acpi_sleep=s4_nonvs
- Newly inserted battery might differ from one just removed, so
- /proc/acpi/alarm: handle day-of-month wraparound on readback
- thermal fixup for broken BIOS which has invalid trip points.
- video: always update the brightness when poking "brightness"
Cpufreq:
- CPUFREQ: add to speedstep-lib additional fsb values for core processors
- CPUFREQ: Add Celeron Core support to p4-clockmod.
- cpuidle: Add decaying history logic to menu idle predictor
Laptop-/Notebook-/Netbook-Driver:
- ACPI: EC: Don't trust ECDT tables from ASUS
- ACPI: EC: Limit workaround for ASUS notebooks even more
- ACPI: thinkpad-acpi: add UWB radio support
- ACPI: thinkpad-acpi: bump up version to 0.22
- ACPI: thinkpad-acpi: debug facility to emulate the rf switches
- ACPI: thinkpad-acpi: handle HKEY event 6030
- ACPI: thinkpad-acpi: preserve radio state across shutdown
- ACPI: thinkpad-acpi: resume with radios disabled
- ACPI: thinkpad-acpi: update documents for the new location
- dell-laptop: move to drivers/platform/x86/ from drivers/misc/
- eeepc-laptop: enable Bluetooth ACPI details
- eeepc-laptop: use select and not depends on
- fujitsu-laptop: Simplify SBLL/SBL2 backlight handling
PCI:
- PCI/ACPI: acpiphp: Identify more removable slots
- PCI: add a new function to map BAR offsets
- PCI: Add legacy_io/mem to all busses
- PCI: add PCI Advanced Feature Capability defines
- PCI: Add pci_clear_master() as opposite of pci_set_master()
- PCI: add pci_common_swizzle() for INTx swizzling
- PCI: add pci_swizzle_interrupt_pin()
- PCI: extend on the ICH motherboard IO decode quirk list
- PCI: handle PCI state saving with interrupts disabled
- PCI hotplug: introduce functions for ACPI slot detection
- PCI: keep ASPM link state consistent throughout PCIe hierarchy
- PCI: pciehp: add ACPI based slot detection
- PCI: pciehp: add auto option to pciehp_detect_mode
- PCI: pciehp: cleanup register and field definitions
- PCI: PCIe portdrv: Add kerneldoc comments to remining core funtions
- PCI: PCIe portdrv: Add kerneldoc comments to some core functions
- PCI: PCIe portdrv: Fix suspend and resume of PCI Express port services
- PCI: pci-stub module to reserve pci device
- PCI PM: Add suspend counterpart of pci_reenable_device
- PCI PM: Avoid touching devices behind bridges in unknown state
- PCI PM: Fix poweroff and restore callbacks
- PCI PM: Power-manage devices without drivers during suspend-resume
- PCI PM: Register power state of devices during initialization
- PCI PM: Restore standard config registers of all devices early
- PCI PM: Run default PM callbacks for all devices using new framework
- PCI: Rework default handling of suspend and resume
- PCI: Suspend and resume PCI Express ports with interrupts disabled
Power Management/Hibernate: