Commit d28d86a0 authored by Heiko Carstens's avatar Heiko Carstens
Browse files

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
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -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