From: Peter Zijlstra
Sent: 20 January 2023 16:23
...
do {
owner = *p;
} while (cmpxchg_relaxed(p, owner, owner | RT_MUTEX_HAS_WAITERS) != owner);owner = READ_ONCE(*p);
Can't we replace the whole of that function with:
set_bit(0, (unsigned long *)&lock->owner);
?
If you need the cast then probably not...
There really ought to be a compile-time test (somehow) that set_bit() is only used on large bit arrays.
OTOH atomic_or32/64() and atomic_and32/64() might use usable in many places.
On x86 I doubt it makes much difference whether you use 'bis' or 'lock or'.
David
- Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)