Danilo Krummrich beküldte a Linux 6.18-as kernelciklushoz tartozó Rust-alapú DRM változtatásokat. A 6.18-as kernelbe szánt frissítés több ezer soros, és egyaránt érinti a grafikus alrendszert, a memóriaallokációs útvonalakat és a DMA-kezelést. Bár a csomag technikailag előrelépésnek tűnik, még erősen kísérleti jellegű, és a fő kérdés, hogy ezek az új elemek hogyan teljesítenek majd valós hardveren és mennyire illeszkednek a kernel stabilitási elvárásaihoz.
Tartalomjegyzék

Mi ez és mi a jelentősége?
A kernelbe beküldött változtatások célja, hogy a Rustban írt komponensek ne önálló kísérleti darabokként éljenek a kernelben, hanem szervesen illeszkedjenek a meglévő infrastruktúrához. Az ütközések más alágakkal többnyire triviális beillesztési problémák voltak, komoly szemantikai konfliktus nélkül. Ez arra utal, hogy a kód karbantarthatóság szempontjából egyelőre nem okoz nagy törést. A csomag több körön keresztül szerepelt már a kernel linux-next fájában, tehát bizonyos fokú tesztelésen is átesett, mielőtt beolvasztásra került volna.
A Nova komponens kapta a legnagyobb figyelmet. Itt a firmware-kezelés átszervezése, a regiszter-hozzáférések egyszerűsítése és a bootfolyamat logikusabb tagolása került előtérbe. A GSP-indítás külön modulba került, a firmware feldolgozás lépései különválasztásra kerültek, és a fejlesztői ág r570.144-es verziójára állt át a projekt, ehhez új alap kötéseket is létrehozva. A VBIOS-kezelésnél kisebb javítások és refaktorálások történtek, a makrók dokumentációja részletesebb lett, a Nova core falcon modulban a DMA-átvitelek 256 bájtos igazítást kaptak. Ezek a változások inkább mérnöki háttérmunkák, de alapvetően szükségesek ahhoz, hogy egy modern GPU-kezelés stabilan és kiszámíthatóan működjön Rustban.
A Tyr névre keresztelt új illesztőváz ARM Mali GPU-khoz készült, és bár erősen kezdeti állapotban van, egy fontos mérföldkő lehet a további fejlesztésekhez. Jelenleg alapvető funkciókra korlátozódik: képes bekapcsolni a GPU-t, metaadatokat kiolvasni MMIO-n keresztül, majd ezeket továbbítani felhasználói térbe egy DRM IOCTL interfészen. Ez önmagában nem használható még teljes értékű meghajtóként, viszont jól jelzi az irányt, amely felé a fejlesztés halad. A közösség számára ez egy teszt környezet, ahol a hibakezelést, az inicializálási folyamatokat és a teljesítményt lehet próbára tenni.
Memória, DMA és scatterlist: alapok, amelyeken a meghajtók állnak
A frissítés egyik nagy szelete az alacsony szintű memóriakezelési és DMA-infrastruktúrát érinti. Megjelent a BorrowedPage típus, valamint az AsPageIter trait, amelyek célja a lapok kezelésének és iterálásának egységesítése. A vmalloc által lefoglalt területekhez oldaliterátor és átalakító metódusok kerültek bevezetésre, a VBox és VVec pedig szintén kaptak ilyen kiterjesztést. Ezek a lépések a memóriafoglalások rendezettebb kezelését ígérik, miközben próbálják csökkenteni az I/O-útvonalon fellépő hibalehetőségeket.
A DMA oldalon új típusok és absztrakciók jelentek meg, köztük a DataDirection, valamint a scatterlist és sg_table köré épített réteg. A fejlesztők mintakódot is csatoltak, amellyel a jövőbeli illesztők könnyebben adaptálhatják ezt a modellt. Bár ez első ránézésre részletkérdésnek tűnhet, a valóságban a GPU-meghajtók teljesítménye nagyrészt ezen múlik: a hibásan kezelt DMA-útvonalak nemcsak lassulást, de rendszerösszeomlást is eredményezhetnek.
A DRM GEM modulban a generikus típusok egyszerűsítése, új típusnevek bevezetése és régi mezők eltávolítása történt. A pin-init makrók jelentősen fejlődtek, immár kódblokkokkal és projekciós struktúrákkal bővültek, aminek célja a „pinelt” objektumok biztonságosabb és rendezettebb inicializálása. Végül, a transmute-hoz új AsBytes és FromBytes metódusok érkeztek, amelyek bár kényelmes eszközök, mindig magukban hordozzák a típushatárok fellazulásának veszélyét.
