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

Reply via email to