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. Paolo