Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[IA64] Fix rwsem: RWSEM_WAITING_BIAS must not be unsigned.

Some nice improvements were made to rwsem in commit:

424acaaeb3a3932d64a9b4bd59df6cf72c22d8f3
rwsem: wake queued readers when writer blocks on active read lock

but this change overlooked that ia64 had defined RWSEM_WAITING_BIAS
as an unsigned value, while the new code required a signed value (as
it is in every other architecture).

This fix suggested by the original patch author: Michel Lespinasse.

Signed-off-by: Tony Luck <tony.luck@intel.com>

Tony Luck b680f097 5af568cb

+3 -3
+3 -3
arch/ia64/include/asm/rwsem.h
··· 40 40 }; 41 41 42 42 #define RWSEM_UNLOCKED_VALUE __IA64_UL_CONST(0x0000000000000000) 43 - #define RWSEM_ACTIVE_BIAS __IA64_UL_CONST(0x0000000000000001) 44 - #define RWSEM_ACTIVE_MASK __IA64_UL_CONST(0x00000000ffffffff) 45 - #define RWSEM_WAITING_BIAS -__IA64_UL_CONST(0x0000000100000000) 43 + #define RWSEM_ACTIVE_BIAS (1L) 44 + #define RWSEM_ACTIVE_MASK (0xffffffffL) 45 + #define RWSEM_WAITING_BIAS (-0x100000000L) 46 46 #define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS 47 47 #define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) 48 48