A Linux 6.19 kernel verzióhoz érkezett egy figyelemre méltó pull request, amely a KVM alrendszert érinti, és a TDX-kód jelentős átdolgozását hozza magával. A fejlesztés célja a régi, berögzült versenyhelyzetek megszüntetése volt. A fejlesztők arra jutottak, hogy a KVM sok esetben akaratlanul idézett elő zárolási ütközéseket a TDX modul belsejében, különösen az S-EPT és a mirror SPTE kezelése kapcsán. Ezeket korábban furcsa kerülőmegoldásokkal vagy egyszerűen figyelmen kívül hagyva kezelték; utóbbira jó példa, hogy a tesztelők több alkalommal is olyan KVM_BUG_ON hibákat váltottak ki, amelyekről korábban senki sem gondolta, hogy egyáltalán előidézhetők. Az új kódbázis ezekre a problémákra kínál rendezett és átlátható megoldást, és sokkal szigorúbban kezeli, milyen állapotban és milyen zárolások mellett lehet S-EPT bejegyzéseket létrehozni, törölni vagy áthelyezni.
Tartalomjegyzék

Megbízhatóbb működés hibajavításokkal
A nagyszabású kódkarbantartás mellett több apró, de annál kellemetlenebb hibát is kijavítottak. Ezek közül az egyik legfontosabb annak elhárítása, amikor egy félbeszakadt vCPU-létrehozás a folyamat végén tönkretette a cpu_list szerkezetét, ami nehezen követhető instabilitáshoz vezetett. Javítás érkezett a sparse figyelmeztetésekre is, így több helyen kicserélték a hibás jelöléseket vagy a zavaró 0-értékeket. A fejlesztés során kiderült, hogy bizonyos SEAMCALL műveletek megpróbálják kizárni a futó vendég vCPU-it, ezért ezek kezelésére mostantól egy új makró biztosít megbízható újrapróbálási mechanizmust.
Az ioctl útvonalak is átszerveződtek: bizonyos TDX-specifikus parancsok immár az úgynevezett „unlocked” vCPU ioctl infrastruktúrán futnak, amely kevésbé okoz torlódást a központi KVM-zárolásoknál. Mindemellett a képességek lekérdezése egyszerűbb lett a struct_size használatával, és több olyan helyzet is megszűnt, amikor a KVM helytelen hibakóddal tért vissza egy belső állapotellenőrzés miatt.
Stabilabb TDX kód a jövőre nézve
A mostani változások érdekessége, hogy a TDX alrendszerhez ritkán került beküldésre külön pull request, ám a mostani átdolgozás olyan méretű és jelentőségű volt, hogy önállóan is indokolták a létjogosultságát. A fejlesztők szerint a csapatmunkának köszönhetően sikerült feltérképezni azokat a határhelyzeteket, amelyekben a TDX modul a vártnál érzékenyebben reagál a zárolások összeakadására. A kódban több helyen megjelentek olyan belső ellenőrzések, amelyek a teljes zárolási készlet meglétét megkövetelik bizonyos állapotváltozásoknál, ezzel csökkentve annak esélyét, hogy később nehezen felderíthető versenyhelyzetek üssenek vissza.
Az S-EPT kezelés és a mirror EPT kitöltése mostantól jóval kiszámíthatóbban halad, és a mérési folyamatok is szigorúbb ellenőrzést kaptak. A fejlesztők reményei szerint ezek az alapok hosszabb távon stabilabb és karbantarthatóbb TDX támogatást biztosítanak, miközben lehetővé teszik, hogy a jövőbeni funkciók jóval kevesebb kerülőmegoldásra szoruljanak.
