mirror of
https://github.com/torvalds/linux.git
synced 2026-10-23 23:51:02 +02:00
xtensa: Emulate two-byte cmpxchg
Xtensa has no two-byte atomic compare and swap, so the __cmpxchg() switch lets case 2 fall through to __cmpxchg_called_with_bad_pointer(), which is declared but never defined, so a two-byte cmpxchg() fails at link time. Route case 2 through the new cmpxchg_emu_u16(), which takes the old and new values as unsigned long and narrows them itself, so the call needs no extra casts. Signed-off-by: Bradley Morgan <brads@mainlining.org> Reviewed-by: Max Filippov <jcmvbkbc@gmail.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
parent
2213947c08
commit
558ccc91dd
|
|
@ -76,6 +76,7 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size)
|
|||
{
|
||||
switch (size) {
|
||||
case 1: return cmpxchg_emu_u8(ptr, old, new);
|
||||
case 2: return cmpxchg_emu_u16(ptr, old, new);
|
||||
case 4: return __cmpxchg_u32(ptr, old, new);
|
||||
default: __cmpxchg_called_with_bad_pointer();
|
||||
return old;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user