Torvalds fikset Intel-bugen KI-en kalte uløselig: 24 debug-patcher og 18 omstarter
Sporet en enkelt feilrundet minneadresse i Intels Xe-driver etter 24 debug-patcher og 18 kjerneomstarter, med en KI som ville gi opp underveis.
«Og dette var en debug-økt fra helvete, enormt hjulpet av en KI som gjorde mye av grovarbeidet. Jeg skulle gjerne kalt den min utrettelige hjelper, men KI-en slo flere ganger fast at dette var umulig og uløselig, og at vi bare burde skrive en rapport om det.» — Linus Torvalds, commit 818bebe
Kommentaren står i klammer nederst i en commit Linus Torvalds skrev og signerte selv 20. august, i filen xe_vram.c i Intels Xe-grafikkdriver. Han pleier ikke å skrive patcher til grafikkdrivere. Denne gangen satt han med et Battlemage G21-kort på 16 GiB der GDM startet på nytt i det uendelige og etterlot en svart skjerm på en ellers fungerende maskin.
Feilen var en avrunding. Funksjonen get_flat_ccs_offset() leser hvor Intels komprimeringslager begynner, skalerer verdien etter antall aktive L3-noder og runder resultatet opp til 128K. Alt under den grensen blir gitt videre til VRAM-allokatoren som ledig minne. På maskinen til Torvalds var den ekte grensen 0x3fafff800 og den avrundede 0x3fb000000, så de siste to kilobytene av en side lå i allokatorens pool selv om de tilhørte komprimeringsmaskinvaren.
«Alt som allokeres der får halen overskrevet av komprimeringsmaskinvaren, som verken trenger en sidetabelloppføring, et bufferobjekt eller en GPU-innsending for å gjøre det, og som gjør det før userspace finnes.» — commit-meldingen, som Torvalds oppgir at KI-en skrev
Nivå-3-sidetabellen til en Mesa-VM landet på nøyaktig den siden ved hver kaldstart. Oppføringen som dekket kompositorens batch-buffer forsvant, første innsending feilet på å hente batchen sin, og GDM restartet i ring. Å restarte GDM manuelt hjalp, fordi neste VM fikk sidetabellene sine et annet sted.
Fiksen er å runde ned i stedet for opp, til sidestørrelsen allokatoren jobber i. På denne maskinen utelukker det nøyaktig én side. Torvalds byttet også ut sjekken som skulle fanget feilen: den sammenlignet offsetet mot GSMBASE minus ccs_size for likhet, og den verdien er selv 128K-justert. Sjekken kunne dermed bare slå til når basen allerede var justert, altså ikke i tilfellet den fantes for, og den ble kompilert bort uten CONFIG_DRM_XE_DEBUG. Hele endringen er 18 linjer inn og 5 ut i én fil, merket for stable-grenene.
Det interessante for deg som bygger med KI er hva modellen faktisk bidro med. Den la til debug-kode og analyserte utskriftene trofast gjennom 24 patcher, men foreslo gjentatte ganger å legge bort problemet og skrive en rapport i stedet. Torvalds' egen forklaring er at modellene er trent av folk som er mindre sta enn ham. Utholdenheten kom fra mennesket, mens grovarbeidet kom fra modellen.
Hva bør du gjøre?
- Kjører du et Intel Battlemage-kort på Linux og har sett GDM restarte i ring etter kaldstart, hent commit 818bebe eller vent på neste stable-oppdatering.
- Behandle «dette er umulig» fra en kodeagent som en hypotese, ikke en konklusjon. Svaret kom først etter 18 omstarter, lenge etter at modellen ville gi seg.
- Sett modellen til det den faktisk holdt ut med her: generere debug-utskrifter, lese dem tilbake og holde orden på patch-rekka.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.