On Fri, 22 Feb 2019 at 14:07, Stefan Hajnoczi <stefa...@gmail.com> wrote: > Richard: Commit 7db2145a6826b14efceb8dd64bfe6ad8647072eb ("bswap: Add > host endian unaligned access functions") introduced the unaligned > memory access functions in question here. Please see below for > details on the bug - basically QEMU code assumes they are atomic, but > that is not guaranteed :(. Any ideas for how to fix this?
I suspect we want a separate family of access functions for "I guarantee this will be an aligned access and I need the atomicity". (The other place where we've talked about needing the atomicity is in emulation of page-table-walk, where you need the page table loads to be atomic w.r.t. other CPU threads, especially in the case where you need to emulate a hardware update of a dirty/access bit in the page table entry.) Mostly this hasn't bitten us before because any sensible compiler will turn the memcpy into a straight load on most common hosts, which will be atomic (but accidentally rather than on purpose). thanks -- PMM