This error:
Invalid DMA address: 0x5002e0925a00
core/memory.lua:95: DMA address tag check failed
is reported by this function:
local uint64_t = ffi.typeof("uint64_t")
function virtual_to_physical (virt_addr)
local u64 = ffi.cast(uint64_t, virt_addr)
if bit.band(u64, 0x500000000000ULL) == 0 then
print("Invalid DMA address: 0x"..bit.tohex(u64,12))
error("DMA address tag check failed")
end
return bit.bxor(u64, 0x500000000000ULL)
end
... and this happens only in certain configurations of a larger application. (Perfectly unreproducible in certain configurations and certainly reproducible in others.)
How can this happen?