Paolo Bonzini <pbonz...@redhat.com> writes: > On 30/09/2016 23:31, Alex Bennée wrote: >> tb = atomic_rcu_read(&cpu->tb_jmp_cache[tb_jmp_cache_hash_func(pc)]); >> - if (unlikely(!tb || tb->pc != pc || tb->cs_base != cs_base || >> - tb->flags != flags)) { >> + if (unlikely(!tb || atomic_read(&tb->pc) != pc || >> atomic_read(&tb->cs_base) != cs_base || >> + atomic_read(&tb->flags) != flags)) { > > This should not be necessary (and is responsible for the 64-on-32 > compilation failure). The load of tb from the cache is an acquire > operation, and synchronizes with the corresponding store in > cpu->tb_jmp_cache.
Is the C11 spec happy with "plain" accesses after the acquire operation? Unfortunately the sanitizer isn't able to see the indirect acquires effect on the other accesses. > > Paolo -- Alex Bennée