Release des Linux-Kernels 6.9

Nach zwei Monaten Entwicklung präsentierte Linus Torvalds die Veröffentlichung des Linux-Kernels 6.9. Zu den auffälligsten Änderungen gehören: das Modul dm-vdo für die Deduplikation und Komprimierung von Blockgeräten, der Direktzugriffsmodus für Dateien in FUSE, die Unterstützung für die Erstellung von pidfd für einzelne Threads, die BPF-Token-Mechanik, die Unterstützung von Rust auf ARM64-Systemen, die Einstufung des Ext2-Dateisystems als veraltet, die Entfernung des alten NTFS-Treibers und die Unterstützung der Intel FRED-Mechanik.

In die neue Version wurden 15680 Fehlerbehebungen von 2106 Entwicklern aufgenommen, die Patchgröße beträgt 54 MB (Änderungen betrafen 11825 Dateien, 687954 Codezeilen wurden hinzugefügt, 225344 Zeilen gelöscht). In der vorherigen Ausgabe wurden 15641 Fehlerbehebungen von 2018 Entwicklern gemeldet, die Patchgröße betrug 44 MB. Etwa 42 % aller in 6.9 vorgenommenen Änderungen betreffen Gerätetreiber, etwa 17 % beziehen sich auf die Aktualisierung hardwarearchitekturspezifischen Codes, 13 % stehen im Zusammenhang mit dem Netzwerkstack, 7 % mit Dateisystemen und 4 % mit internen Kernel-Subsystemen.

Die wichtigsten Neuerungen im Kern 6.9:

  • Festplattensubsystem, Ein-/Ausgabe und Dateisysteme
    • Im Device Mapper (DM) wurde ein neuer Handler dm-vdo (virtual data optimizer) hinzugefügt, der es ermöglicht, basierend auf bestehenden Blockgeräten ein virtuelles Blockgerät zu implementieren, das Funktionen wie die Deduplikation wiederkehrender Daten, die Datenkompression, das Auslassen leerer Blöcke und die Erhöhung der Blockgerätegröße nach Bedarf (thin provisioning) bietet. Diese Funktionen werden auf Blockgeräteebene implementiert und sind unabhängig vom verwendeten Dateisystem (zum Beispiel kann mit dm-vdo eine automatische Zusammenführung von duplizierten Daten und die Speicherung von Informationen in komprimierter Form für beliebige Dateisysteme realisiert werden). Die Anwendung von dm-vdo für physische Speichermedien mit einer Größe von bis zu 256 TB und die Erstellung logischer Volumen mit einer Größe von bis zu 4 PB wird unterstützt. Für die Verwaltung von VDO-Partitionen wird empfohlen, lvm zu verwenden. Die VDO-Technologie wurde von Permabit entwickelt und nach der Übernahme durch Red Hat im Jahr 2017 geöffnet.
    • Im FUSE-Subsystem, das zur Implementierung von Dateisystemen im Benutzerspace verwendet wird, wurde eine erste Implementierung des „Passthrough“-Modus hinzugefügt, die es ermöglicht, Daten von Dateien direkt auf Kernel-Ebene abzurufen, ohne den im Benutzerspace arbeitenden Prozess zu durchlaufen, was in bestimmten Situationen die Leistung erheblich steigern kann. Beispielsweise können FUSE-Implementierungen von Dateisystemen, die im Nur-Lese-Modus arbeiten und den Zugriff auf Dateien einschränken, den Inhalt von Dateien aus dem ursprünglichen Dateisystem bereitstellen, ohne sie an den FUSE-Prozess weiterzugeben.
    • Der Treiber mit der Implementierung des Ext2-Dateisystems wurde in die Kategorie der veralteten (deprecated) Treiber aufgenommen. Als Grund wird die Unterstützung von nur 32-Bit-Zeitstempeln in inode erwähnt, die am 19. Januar 2038 überlaufen werden. Statt des ext2-Treibers wird empfohlen, den ext4-Treiber zu verwenden, der mit dem Ext2-Dateisystem kompatibel ist und auf ext2-Partitionen Zeitstempel verwenden kann, die nicht von dem 2038-Problem betroffen sind, sofern das Dateisystem mit inodes erstellt wurde, die größer als 255 Byte sind (im ext2-Treiber wurden 32-Bit-Zeitstempel unabhängig von der Größe der inode verwendet).
    • Der alte NTFS-Dateisystemtreiber wurde entfernt, ersetzt durch den neuen NTFS3-Treiber, der seit der Version 5.15 erhältlich ist. Die Bereitstellung von zwei NTFS-Implementierungen im Kernel wird als nicht sinnvoll erachtet, da der alte Treiber seit vielen Jahren nicht aktualisiert wurde, in einem desolaten Zustand ist und nur im Nur-Lese-Modus arbeiten kann.
    • In die Dateisysteme zonefs und hugetlbfs wurde die Unterstützung für das Mapping von Benutzer-IDs montierter Dateisysteme hinzugefügt, die verwendet wird, um Dateien eines bestimmten Benutzers auf einer montierten fremden Partition mit einem anderen Benutzer im aktuellen System abzugleichen.
    • In NFSv4 erhalten Administratoren die Möglichkeit, die Zustände von Dateizugriffen und -sperren zu bereinigen.
    • Für das Ext4-Dateisystem werden nur Fehlerbehebungen und Updates der kunit-Tests verzeichnet.
    • In Btrfs wird die Fortsetzung der Funktionsübertragung auf die Verwendung von Seitenfolien (page folios) fortgesetzt.
    • Im XFS-Dateisystem wurde die Arbeit an der Implementierung der Nutzung des Dienstprogramms fsck zur Überprüfung und Behebung festgestellter Probleme im Online-Modus ohne Aushängen des Dateisystems fortgesetzt.
    • Im Systemaufruf pwritev2() wurde das Flag RWF_NOAPPEND hinzugefügt, das es ermöglicht, einen Offset für die Schreiboperation anzugeben, selbst wenn die Datei im Nur-Append-Modus geöffnet wurde.
    • Neue ioctl-Befehle hinzugefügt: FS_IOC_GETUUID — gibt die UUID der angegebenen Dateisystem zurück, und FS_IOC_GETFSSYSFSPATH — bestimmt den Speicherort im /sys/fs des angegebenen eingehängten FS.
    • Die Dateisysteme efs, qnx4 und coda wurden auf die Verwendung der neuen API zum Einhängen von Partitionen umgestellt.
    • Die Implementierung von Dateioperationen, die im Fall-insensitiven Modus durchgeführt werden, wurde verbessert. Die Leistung wurde durch anfängliches Vergleichen unter Berücksichtigung der Groß-/Kleinschreibung und das Zurückfallen auf die Suche ohne Berücksichtigung der Groß-/Kleinschreibung erhöht. Probleme beim Einhängen von overlayfs über Verzeichnissen, für die der fall-insensitive Modus aktiviert wurde, wurden behoben.
  • Speicher und Systemdienste
    • Die Unterstützung des Intel FRED (Flexible Return and Event Delivery) Mechanismus wurde implementiert, der entwickelt wurde, um die Effizienz und Zuverlässigkeit der Informationsübertragung über niedrige Ereignisse im Vergleich zu dem derzeit verwendeten IDT (Interrupt Descriptor Table) Mechanismus zu verbessern. Die Leistungssteigerung und die Reduzierung der Latenz werden durch die Rückkehr von Ereignissen mittels der Prozessoranweisung IRET anstelle der Übertragung von Ereignissen über die IDT-Tabelle erreicht. Die Zuverlässigkeit wird durch die getrennte Verarbeitung des Eintreffens von Ereignissen im Kontext des Kernels und im Benutzermodus, den Schutz vor geschachtelter NMI-Ausführung und die Speicherung aller mit der Ausnahme verbundenen CPU-Register in einem erweiterten Stack-Frame gewährleistet.
    • Die Möglichkeit zur Optimierung des Zugriffs auf Daten einzelner CPU-Kerne wurde durch die Verwendung benannter Adressräume (Named Address Spaces) im Kernel-Code implementiert, die in GCC als GNU C-Erweiterung realisiert sind.
    • Der pidfd_open()-Funktion wurde das Flag PIDFD_THREAD hinzugefügt, das es ermöglicht, pidfd für einzelne Threads zu erstellen, anstatt pidfd nur im Kontext des Gruppenleiters von Threads zu verwenden. Es wurde auch eine Implementierung eines Pseudo-Dateisystems vorgeschlagen, um über das virtuelle Dateisystem auf pidfd zuzugreifen. Im Gegensatz zur Identifizierung von Prozessen mit pid ist die pidfd-ID an einen bestimmten Prozess gebunden und ändert sich nicht, während der PID nach Abschluss des aktuellen Prozesses an einen anderen Prozess gebunden werden kann.
    • Im BPF-Subsystem wurde der BPF-Token-Mechanismus hinzugefügt, der Programmen selektiv Zugriffsrechte auf privilegierte BPF-Operationen gewährt. Beispielsweise kann einem nicht privilegierten Programm der Zugang zu einzelnen BPF-Subsystemen gewährt werden, ohne vollständige CAP_BPF-Rechte zu erteilen.
    • Im BPF-Subsystem wurde ein neuer Typ des gemeinsamen Speichers bpf_arena hinzugefügt, der den Bereich definiert, der von BPF-Programmen und Prozessen im Benutzerspeicher gemeinsam genutzt werden kann. Es wurde der Befehl may_goto hinzugefügt, der die Organisation von Schleifen ermöglicht, die durch den Verifier unterbrochen werden können. Zudem wurde die Möglichkeit hinzugefügt, aus BPF-Programmen beliebige TCP SYN-Cookies zu generieren und BPF-Handler zur Bekämpfung von SYN-Flutting zu erstellen.
    • Die Übertragung von Änderungen aus dem Rust-for-Linux-Zweig, die die Nutzung der Programmiersprache Rust als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen betreffen, wurde fortgesetzt (die Unterstützung von Rust ist standardmäßig nicht aktiv und führt nicht dazu, dass Rust zu den obligatorischen Build-Abhängigkeiten des Kernels gehört). Die Unterstützung für die Nutzung der Programmiersprache Rust auf 64-Bit-ARM-Prozessoren wurde hinzugefügt. Ein Umstieg auf die Version 1.76 von Rust wurde vollzogen. Das Makro 'container_of!' wurde hinzugefügt. Anstelle der instabilen Funktionalität 'ptr_metadata' wurde die stabile Methode 'byte_sub' verwendet. Ein Modul 'time' mit der Funktion zur Umwandlung von Zeit 'msecs_to_jiffies()' wurde hinzugefügt.
    • Im io_uring-Subsystem wurde die Möglichkeit hinzugefügt, Dateien zu kürzen (ftruncate_file).
    • Ein neuer Typ von Arbeitswarteschlangen WQ_BH (workqueue Bottom Halves) wurde hinzugefügt, um asynchrone Codeausführungen im Kontext von Software-Interrupts zu ermöglichen und die veralteten Tasklets zu ersetzen.
    • Das Timer-Subsystem wurde umfassend überarbeitet, wobei die Logik zur Auswahl des aktiven CPU-Kerns zur Ausführung des ausgelösten Timers verbessert wurde, um inaktive Kerne im Energiesparmodus nicht zu wecken.
    • Es wurde die Möglichkeit implementiert, das Energieverbrauchsmodell des Kerns (EM, Energy Model) während des Betriebs zu aktualisieren, was beispielsweise zur Berücksichtigung des Einflusses der Betriebstemperatur auf die Energieeffizienz der CPU verwendet werden kann. Die Leistung der Funktion em_cpu_energy() wurde erheblich gesteigert, die jetzt in Tests auf einem stationären System 1,43 Mal schneller und im Test auf dem RockPi 4B 1,69 Mal schneller ausgeführt wird.
    • Die Unterstützung für den Betrieb von Systemen auf Basis der Architektur ARM64 im LPA2-Modus mit einem 52-Bit-virtuellen Adressraum wurde hinzugefügt.
    • Für ARM64-Systeme wurde die Unterstützung für kontinuierliche PTE-Einträge (Page Table Entry) implementiert, die die Leistung durch eine effizientere Nutzung des TLB (Translation Lookaside Buffer) erhöhen können.
    • Patches zur Verbesserung der Leistung des Speichermanagementsystems wurden implementiert, um die Entstehung konkurrierender Sperren in vmalloc() zu reduzieren.
    • Für die LoongArch-Architektur wurde ein Mechanismus für das Hot-Patching des Kernels (Live Patching) implementiert, der es ermöglicht, Korrekturen am Kernel ohne Neustart anzuwenden.
    • Für RISC-V-Systeme wurde die Unterstützung des Systemaufrufs membarrier() implementiert, der Speicherbarrieren für in der Systemumgebung laufende Threads festlegt.
    • Die Anforderungen an die Version von LLVM/Clang, die für den Kernelbau verwendet werden kann, wurden erhöht. Für den Bau ist jetzt mindestens die Version LLVM 13.0.1 erforderlich (zuvor war der Bau mit LLVM 11+ unterstützt).
    • Der Mechanismus „User Trace Events“, der es ermöglicht, Trace-Events aus Benutzerprozessen zu erstellen, um die Aktivität im Benutzerspeicher zu verfolgen, unterstützt jetzt den Export von Ereignisinformationen in verschiedenen Formaten (USER_EVENT_REG_MULTI_FORMAT).
    • Dem Funktionsaufruf-Trace-Mechanismus wurde die Möglichkeit hinzugefügt, den Zustand der übergebenen Argumente bei der Rückverfolgung des Funktionsausgangs zu überwachen. Die Rückgabewerte können jetzt den bei der Funktionsaufruf verwendeten Argumenten zugeordnet werden.
    • Das Perf-Tool unterstützt jetzt den Aggregierungsmodus „cluster“ („perf stat -a —per-cluster“), um Statistiken von gemeinsam genutzten Ressourcen zusammenzufassen. Die Möglichkeit zur Verwendung der libcapstone-Bibliothek für die Disassemblierung von Prozessoranweisungen („perf script -F disasm“) wurde implementiert. Darüber hinaus wurden Optimierungen des Speicherverbrauchs bei der Ausführung der Befehle perf report und perf annotate durchgeführt.
  • Virtualisierung und Sicherheit
    • Ein Schutz gegen die Vulnerabilität RFDS (Register File Data Sampling) in Intel Atom-Prozessoren wurde hinzugefügt, die es ermöglicht, Restinformationen aus den Registerdateien (RF, Register File) des Prozessors zu extrahieren, die zur gemeinsamen Speicherung des Inhalts der Register in allen Aufgaben auf demselben CPU-Kern verwendet werden. Für die Minderung der Schwachstelle sind eine Microcode-Aktualisierung und die Verwendung der instruktion VERW erforderlich, um die Inhalte der mikroarchitektonischen Puffer beim Zurückkehren vom Kernel in den Benutzerspeicher zu löschen. Um den Schutz beim Booten des Kernels zu aktivieren, kann das Flag „reg_file_data_sampling=on“ gesetzt werden. Informationen über die Anfälligkeit für die Schwachstelle und die Verfügbarkeit des erforderlichen Microcodes zum Schutz können in der Datei „/sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling“ eingesehen werden.
    • Die grundlegende Unterstützung für den Schutz von Gastbetriebssystemen durch die AMD SEV-SNP (Secure Nested Paging)-Erweiterung wurde hinzugefügt, die einen sicheren Umgang mit verschachtelten Seitentabellen ermöglicht und vor den Angriffen 'undeSErVed' und 'SEVerity' auf AMD EPYC-Prozessoren schützt und so den Schutzmechanismus AMD SEV (Secure Encrypted Virtualization) umgeht. In KVM den erforderlichen Änderungen zur Nutzung von SNP sollen in der Version 6.10 hinzugefügt werden.
    • Die Module, die Technologien wie IMA (Integrity Measurement Architecture) und EVM (Extended Verification Module) implementieren, wurden auf das LSM (Linux Security Modules)-Framework umgestellt, was es ermöglichte, den Code erheblich zu vereinfachen, redundante Funktionalitäten zu bündeln und die über LSM verfügbaren Standardfunktionen zu nutzen, ohne die Funktionalität zu verlieren. Das IMA-Modul dient zur Integritätsprüfung von Betriebssystemkomponenten mittels digitaler Signaturen und Hashes. Das EVM-Modul schützt erweiterte Dateiattribute (xattrs) vor Angriffen, die darauf abzielen, deren Integrität zu verletzen (EVM verhindert Offline-Angriffe, bei denen ein Angreifer Metadaten ändern kann, z. B. beim Booten von einem eigenen Speichermedium).
    • Die Systemaufrufe lsm_list_modules(), lsm_get_self_attr() und lsm_set_self_attr() wurden überarbeitet, um die Kompatibilität mit 32-Bit-Umgebungen zu verbessern. Diese Aufrufe dienen dazu, eine Liste der geladenen LSM-Module (Linux Security Modules) auszugeben und die Attribute des LSM-Moduls abzurufen/zu setzen. Die Änderungen verletzen die Abwärtskompatibilität, jedoch schätzte Linus Torvalds, dass diese Änderungen zulässig sind, da die neuen Systemaufrufe in der letzten Kernel-Version hinzugefügt wurden und bisher nicht in Anwendungen verwendet werden.
    • Es wurde ein Versuch unternommen, den Mechanismus UBSAN (Undefined Behavior Sanitizer) wieder zu verwenden. Das Problem besteht darin, dass Compiler ganz unterschiedlich mit Überläufen ganzer Zahlen für signierte und unsigned Typen umgehen. Signierte Überläufe und Überläufe von Zeigern fallen in die Kategorie des undefinierten Verhaltens, während unsigned Überläufe modulo 2n abgeschnitten werden, wobei nur die niederwertigsten Bits des Ergebnisses erhalten bleiben („wrap-around“) und nicht unter undefiniertes Verhalten fallen. Um Situationen mit undefiniertem Verhalten auszuschließen, wird der Kernel mit der Option „-fno-strict-overflow“ kompiliert, was zu einer Verwendung von „wrap-around“ für alle Überläufe ganzer Zahlen führt. GCC und Clang können bei der Verwendung des Flags „-fno-strict-overflow“ einige Probleme nicht richtig diagnostizieren, und die Aktivierung von UBSAN zielt darauf ab, eine Zusammenarbeit mit den Compiler-Entwicklern zur Beseitigung von Fehlalarmen und zur Identifizierung von Überläufen ganzer Zahlen an Orten durchzuführen, an denen keine expliziten Prüfungen vorhanden sind.

      Zur Überprüfung möglicher Überläufe im Kernel werden Konstruktionen wie „var + offset PAGE_SHIFT) < pgoff){..}“) verwendet, die an die Unterstützung mit dem Flag „-fno-strict-overflow“ gebunden sind und nicht den gesamten Code abdecken, in dem potenziell ein Überlauf auftreten kann. Das Problem ist, dass solche Prüfungen bei der Verwendung von UBSAN eine große Anzahl von Fehlalarmen verursachten, weshalb UBSAN im Jahr 2021 deaktiviert werden musste. In der aktualisierten Implementierung wurde vorgeschlagen, spezielle Anmerkungen __signed_wrap und __unsigned_wrap sowie fertige Makros mit Prüfungen add_would_overflow(a, b) und add_wrap(a, b) zu verwenden, die es ermöglichen, die beabsichtigte Verwendung von Überläufen durch die Entwickler von unbeabsichtigten Überläufen zu trennen, die zu Sicherheitsanfälligkeiten führen können. Der Vorschlag für eine umfassendere Umgestaltung des Kernels mit zusätzlichen Typdefinitionen wurde von Linus Torvalds abgelehnt.

  • Netzwerksubsystem
    • Im NetzwerkSubsystem wurde daran gearbeitet, das Auftreten konkurrierender Sperren („lock contention“, der Versuch, eine von einem anderen Thread gehaltene Sperre zu erhalten) zu verringern. Die Verwendung von RTNL-Sperren wurde reduziert.
    • Die Möglichkeit zur Aktivierung der Unterstützung von Active Socket Polling (Busy Polling) im Kontext einzelner epoll-Aufrufe wurde hinzugefügt. Die Größe des Pools und die Budgetparameter können unabhängig von den standardmäßigen Systemeinstellungen festgelegt werden.
    • Die net_hotdata-Struktur wurde implementiert, um die Effizienz des Cachings der am häufigsten verwendeten Netzwerk-Konfigurationsvariablen zu erhöhen.
    • In MPTCP wurde die Unterstützung zur Festlegung der TCP_NOTSENT_LOWAT-Option für Sockets hinzugefügt, die die Größe des Sendepuffers begrenzt. In der API für MCTP-Sockets wurde die Unterstützung von Netzwerk-IDs hinzugefügt, die die Verwendung mehrerer nicht überlappender MCTP-Netzwerke auf einem Host ermöglichen.
    • In IPSec wurde die Unterstützung für das Umleiten von ICMP-Fehlermeldungen (RFC 4301) hinzugefügt.
    • Der Prozess des Scannens von Routen mit abgelaufener Lebensdauer wurde beschleunigt.
    • Die Leistung von XDP wurde verbessert, indem die Zuweisung großer Speicherblöcke strikter vermieden wird.
    • Die Möglichkeit, Metadaten an netconsole-Nachrichten anzuhängen, wurde hinzugefügt.
    • In Netfilter wurde die Definition von Tabellen aus dem Benutzerspeicher erlaubt, die an den verwaltenden Hintergrundprozess gebunden sind und nach dem Abschluss der Benutzeranwendung nicht automatisch gelöscht werden.
    • In nftables wurde das Hinzufügen von Elementen zu Set-Gruppen mit zusammengefassten Bereichen beschleunigt.
  • Ausrüstung
    • Im i915-Treiber wurde die Unterstützung für Intel LunarLake-Chips (Xe 2) weiter vorangetrieben. Neue PCI-IDs für Geräte basierend auf Intel Arrow Lake und Alder Lake N wurden hinzugefügt. Für DisplayPort wurde die Unterstützung für Tunneling (DP Tunneling) und Bandbreitenzuweisung (Bandwidth Allocation) hinzugefügt. Für alle Plattformen wurde der Fastboot-Modus aktiviert. Außerdem wurde die Unterstützung für Debugging-Ausgaben in Bezug auf einzelne Geräte hinzugefügt.
    • Im AMDGPU-Treiber wurde die Vorbereitung zur Implementierung der Unterstützung für AMD RDNA3.5 und RDNA4 GPUs getroffen. Unterstützung für ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 und das RAS ACA-Framework wurde hinzugefügt. Ein Parameter freesync_video wurde in das Kernmodul eingefügt, um die experimentelle Unterstützung für die Optimierung des Wechsels zwischen Video-Modi mit der adaptiven Synchronisationstechnologie FreeSync zu aktivieren.
    • Im Nouveau-Treiber wurde der Steuerungscode für den Bildschirm auf die Verwendung der Funktion kmemdup() umgestellt.
    • Die Arbeit am DRM-Treiber (Direct Rendering Manager) Xe für GPUs auf Basis der Intel Xe-Architektur, die in den Grafikkarten der Intel Arc-Familie und in der integrierten Grafik ab den Tiger Lake-Prozessoren verwendet wird, wurde fortgesetzt.
    • Ein DRM-Treiber für Mediatek MT8188-VDOSYS1-Chips wurde hinzugefügt.
    • Die mit den Video-Subsystemen verbundenen Kernel-Einstellungen wurden in den Abschnitt CONFIG_VIDEO verschoben.
    • Unterstützung für ARM64 SoCs: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S wurde hinzugefügt.
    • Unterstützung für ARM-Plattformen und Geräte wurde hinzugefügt: Android-Handys basierend auf dem Tegra30-Chip, Chromebook-Modelle auf Basis des Mediatek MT8186, NAS, Tablets und Spielkonsolen auf Basis der Rockchips RK35xx, White Hawk-Boards basierend auf SoCs von Renesas, Boards basierend auf Qualcomm SM8550 (Snapdragon 8 Gen 2), Apalis Evaluation Board, Sielaff i.MX6 Solo Board und Samsung Galaxy Tab 4 10.1 LTE.
    • Der Code des Audio-Subsystems ALSA wurde refaktoriert. Unterstützung für Audio-Systeme von Microchip SAM9x7, NXP i.MX95 und Qualcomm WCD939x wurde hinzugefügt. Der SoundWire-Treiber erhielt Unterstützung für ASoC mit Audio-Coprozessoren von AMD ACP 6.3, und für Intel-Systeme wurde ein DSPless-Modus implementiert. Unterstützung für zusätzliche Audiocodecs von Cirrus HD wurde hinzugefügt. Die Verwaltung von Audio-Geräten im Virtio-Treiber wurde verbessert.
    • Unterstützung für Ethernet-Controller Marvell Octeon PCI Endpoint NIC VF und Intel E825-C 100G wurde hinzugefügt.

Gleichzeitig bildete die lateinamerikanische Free Software Foundation eine vollständig freie Version des Kernels 6.9 — Linux-libre 6.9-gnu, die von Firmware und Treibern, die nicht freie Komponenten oder Codeabschnitte enthalten, sowie von Herstellerbeschränkungen befreit ist. Im Release 6.9 wurde der Code zur Bereinigung von Blobs in den Treibern amdgpu, ath12k, adreno, btusb und r8169 aktualisiert. Eine Bereinigung des neuen Treibers ptp_fc3 wurde durchgeführt. Die Benennung von Blobs in DTS-Dateien (Device Tree) für die Architektur Aarch64 wurde bereinigt. Probleme mit der Bereinigung des Treibers i915, die zu einer Blockade während der Initialisierung führten, wurden beseitigt. Änderungen im Zusammenhang mit der Handhabung von Blobs, die in Form von Hexdump bereitgestellt werden, wurden vorgenommen.

Quelle: opennet.ru

60GB SSD 8Gb DDR4