Commit d28d86a0 authored by Heiko Carstens's avatar Heiko Carstens

s390/mm: make use of atomic_fetch_xor()

Make use of atomic_fetch_xor() instead of an atomic_cmpxchg() loop to
implement atomic_xor_bits() (aka atomic_xor_return()). This makes the C
code more readable and in addition generates better code, since for z196
and newer a single lax instruction is generated instead of a cmpxchg()
loop.
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent 038c5bed
......@@ -133,13 +133,7 @@ int crst_table_upgrade(struct mm_struct *mm, unsigned long end)
static inline unsigned int atomic_xor_bits(atomic_t *v, unsigned int bits)
{
unsigned int old, new;
do {
old = atomic_read(v);
new = old ^ bits;
} while (atomic_cmpxchg(v, old, new) != old);
return new;
return atomic_fetch_xor(bits, v) ^ bits;
}
#ifdef CONFIG_PGSTE
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment