Nei giorni scorsi Linus Torvalds ha scritto e portato di persona nel ramo principale del kernel Linux una correzione al driver grafico Intel Xe. Nella sostanza si tratta di una riga: un round_up() che diventa un round_down() nel calcolo dell'offset della flat CCS storage, l'area di memoria che sulle GPU Intel ospita i metadati di compressione. Per arrivare a quella riga sono servite 24 patch di strumentazione e 18 avvii del kernel, in quella che Torvalds definisce "una sessione di debug infernale".

Su una Battlemage G21 da 16 GiB lo schermo restava nero a ogni avvio a freddo, su una macchina per il resto perfettamente funzionante. Il gestore di sessione gdm entrava in un ciclo di riavvii senza fine, e riavviarlo a mano rimetteva le cose a posto. La causa stava sotto lo userspace, in memoria che il driver dichiarava libera e che libera non era.

Un arrotondamento per eccesso al posto di uno per difetto

La funzione get_flat_ccs_offset() legge dall'hardware la base della flat CCS storage, la scala per il numero di nodi L3 attivi e consegna all'allocatore della VRAM tutto ci� che sta sotto l'offset risultante. Quell'indirizzo segna il punto in cui la memoria utilizzabile finisce e comincia la porzione che appartiene all'hardware di compressione. Arrotondarlo per eccesso al multiplo di 128 KiB superiore, come faceva il codice, pubblica come libera anche la fascia compresa fra la base reale e quella arrotondata.