Because atomic_read/atomic_set does not work on platforms that only
support 32-bit atomic writes, we need volatile_read/volatile_set.
This patch fixes up Sergey's series to use volatile_read/volatile_set
instead of atomic_read/atomic_set. Because volatile_read/volatile_set
can cause torn writes, the invalidation mechanism for SPARC targets is
changed to use flags instead of cs_base. Torn writes are not a problem
for targets that don't use cs_base at all, because 0xffffffff00000000
or 0x00000000ffffffff cs_bases cannot be confused with the cs_base of
a valid translation block.
The patch also includes two fixes, respectively using atomic_rcu_read in
tb_find and fixing computation of the hash index in tb_phys_invalidate.
Signed-off-by: Paolo Bonzini <address@hidden>