As noticed by Linus, it is critical that some of the
rwsem constants be signed. Yet, hex constants are
unsigned unless explicitly casted or negated.
The most critical one is RWSEM_WAITING_BIAS.
This bug was exacerbated by commit
424acaaeb3
("rwsem: wake queued readers
when writer blocks on active read lock")
Signed-off-by: David S. Miller <davem@davemloft.net>
13 lines
437 B
C
13 lines
437 B
C
/* rwsem-const.h: RW semaphore counter constants. */
|
|
#ifndef _SPARC64_RWSEM_CONST_H
|
|
#define _SPARC64_RWSEM_CONST_H
|
|
|
|
#define RWSEM_UNLOCKED_VALUE 0x00000000
|
|
#define RWSEM_ACTIVE_BIAS 0x00000001
|
|
#define RWSEM_ACTIVE_MASK 0x0000ffff
|
|
#define RWSEM_WAITING_BIAS (-0x00010000)
|
|
#define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS
|
|
#define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
|
|
|
|
#endif /* _SPARC64_RWSEM_CONST_H */
|