Jádro Linuxu obchází chybu procesorů Zen 5 druhým zavoláním instrukce TLBSYNC
Procesor Zen 5 nemusí při dvojici instrukcí INVLPGB a TLBSYNC zneplatnit záznam ve vyrovnávací paměti překladů TLB. Linus Torvalds začlenil 11. října 2026 obezličku: jádro se podívá do CPUID, jestli chybu opravuje mikrokód, a kde ji neopravuje, pošle TLBSYNC ještě jednou.

Linus Torvalds začlenil 11. října 2026 do hlavní větve jádra balík oprav x86-urgent-2026-10-11 od Inga Molnára. Je v něm jediná položka a zabere třináct přidaných řádků: obezlička pro chybu procesorů AMD Zen 5, kvůli které stroj nemusí zneplatnit záznam ve vyrovnávací paměti překladů TLB, přestože mu to jádro přikázalo. Den nato vyšla verze 7.3-rc7, která už opravu obsahuje.
INVLPGB rozešle příkaz, TLBSYNC čeká na dokončení
Každé jádro procesoru si pamatuje nedávné překlady virtuálních adres na fyzické v malé vyrovnávací paměti TLB. Když operační systém změní stránkovací tabulky, musí staré záznamy zneplatnit i na ostatních jádrech, ne jen na tom svém. Dlouho se to dělalo rozesláním přerušení: každé jádro dostalo zprávu a uklidilo si svůj TLB samo.
AMD na to přidala dvojici instrukcí. INVLPGB rozešle příkaz ke zneplatnění všem jádrům v systému, takže přerušení nejsou potřeba. Instrukce ale podle komentáře ve zdrojovém souboru arch/x86/include/asm/tlb.h nedrží pořadí a víc zneplatnění může probíhat souběžně. Druhá instrukce, TLBSYNC, proto počká, až se všechna zneplatnění vyslaná z téhož jádra dokončí. Bez ní by systém pokračoval dál, zatímco procesor má úklid teprve rozdělaný.
Linux takhle uklízí jaderné překlady od verze 6.15. Patch Rika van Riela x86/mm: Use INVLPGB for kernel TLB flushes se do hlavní větve dostal 19. března 2025 a smyslem bylo zbavit se právě těch přerušení.
Procesor občas záznam nezruší
Popis commitu x86/CPU/AMD: Fix AMD TLBI Erratum #1718 je na dva řádky. Procesor může při vykonávání dvojice INVLPGB a TLBSYNC selhat ve zneplatnění záznamu TLB (v originále „The processor may fail to invalidate a TLB entry while executing an INVLPGB/TLBSYNC instruction pair“). V TLB pak může zůstat překlad adresy, který už neplatí.
Chybu opravuje mikrokód procesoru. Jádro se o tom dozví z CPUID: nový příznak X86_FEATURE_TLBSYNC_SFW_NO odpovídá bitu 4 v registru EAX listu 0x80000021 a jeho komentář v souboru cpufeatures.h zní doslova „TLBI Erratum #1718 fixed in microcode“. Příznak tedy říká, že mikrokód tu opravu obsahuje.
Třináct řádků ve třech souborech
Oprava nemaže ani jeden řádek. V cpufeatures.h přibyly dvě definice, zmíněný příznak a chyba X86_BUG_TLBI. V souboru amd.c dostala funkce init_amd_zen5() tři řádky: umí-li procesor INVLPGB a příznak o opravě v mikrokódu nemá, jádro mu tu chybu nastaví. A v tlb.h pak funkce __tlbsync() u takového procesoru pošle TLBSYNC podruhé.
Rozdíl mezi oběma novými značkami je vidět i zvenčí. Chyba X86_BUG_TLBI má v komentáři uvozený řetězec „tlbi“, takže ji jádro vypíše v řádku bugs v /proc/cpuinfo. Příznak o opraveném mikrokódu uvozený řetězec nemá, a v /proc/cpuinfo se proto neobjeví vůbec. Pravidlo o tom stojí hned v hlavičce téhož souboru.
Koho se to týká
Detekce sedí ve funkci pro Zen 5, takže na starší generace nedosáhne. Podle amd.c jádro mezi Zen 5 řadí procesory rodiny 0x1a s modely 0x00 až 0x2f, 0x40 až 0x4f, 0x60 až 0x7f a 0xd0 až 0xd7; Zen 6 je z téže rodiny, ale má modely jiné a touhle větví neprochází. Druhá podmínka je samotná instrukce INVLPGB, třetí pak zapnutá volba jádra CONFIG_BROADCAST_TLB_FLUSH, bez které se celá dvojice instrukcí nepoužívá.
Záplatu napsal Borislav Petkov z AMD, posoudil ji Rik van Riel a vyzkoušeli ji Lorenzo Stoakes a Rik van Riel. Nese značku Cc: stable@kernel.org, takže má zamířit i do starších udržovaných řad. Seznamy změn jádra 7.2.10 a 6.18.56, obě z 11. října 2026, erratum #1718 nezmiňují.
Zdroje
- Commit x86/CPU/AMD: Fix AMD TLBI Erratum #1718 (2. října 2026)
- Merge tag 'x86-urgent-2026-10-11' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip (11. října 2026)
- Commit x86/mm: Use INVLPGB for kernel TLB flushes (19. března 2025)
- arch/x86/include/asm/tlb.h ve značce v7.3-rc7
- arch/x86/include/asm/cpufeatures.h ve značce v7.3-rc7
- kernel.org: přehled vydání
- Phoronix: Linux Landing Kernel Workaround For AMD TLBI Erratum #1718