Warum ldaxr auf echter Hardware crasht, in QEMU aber nicht
When Ldaxr Doesn't Work: Exclusive Accesses and Cacheability on AArch64
Beim Bau seines AArch64-Betriebssystems floss stieß der Autor auf ein rätselhaftes Data-Abort-Exception auf einem Raspberry Pi 5, ausgelöst durch die ldaxr-Instruktion in einem Spinlock. QEMU zeigte das Problem nie. Die Ursache lag in der Cacheability: Das SCTLR.C-Bit war standardmäßig deaktiviert, wodurch der Speicher als nicht cachebar behandelt wurde. Exklusive Zugriffe erfordern jedoch Write-Back-Cache-Attribute. Der Artikel erklärt die Zusammenhänge von Speichertypen, MAIR-Attributen und exklusiven Operationen.
Wenn der Daten-Cache deaktiviert ist, werden alle Lade- und Speicherbefehle auf cachebaren Speicher so behandelt, als wären sie nicht cachebar und inkohärent mit den Caches sowohl dieses Kerns als auch anderer Kerne im Cluster.