Почему ldaxr падает на реальном железе, но работает в QEMU
When Ldaxr Doesn't Work: Exclusive Accesses and Cacheability on AArch64
Автор пишет операционную систему floss для AArch64 и реализует спин-блокировку на инструкциях ldaxr/stxr. В QEMU всё работает, но на Raspberry Pi 5 возникает Data Abort. Причина — в атрибутах памяти: для эксклюзивного доступа необходима кэшируемая память с политикой Write-Back. Отключение кэша через SCTLR.C или использование Non-cacheable/Write-Through атрибутов приводит к исключению. Статья разбирает типы памяти, атрибуты MAIR и различия между эмуляцией и реальным железом.
Судя по этому эксперименту, похоже, что инструкция load exclusive не работает без Write-Back.