Add priority inheritance futex support on sparc.

* sysdeps/unix/sysv/linux/sparc/lowlevellock.h
	(FUTEX_WAIT_REQUEUE_PI): Define.
	(FUTEX_CMP_REQUEUE_PI): Likewise.
	(lll_futex_wait_requeue_pi): Likewise.
	(lll_futex_timed_wait_requeue_pi): Likewise.
	(lll_futex_cmp_requeue_pi): Likewise.
This commit is contained in:
David S. Miller 2013-02-21 15:20:27 -08:00
parent 2366713d87
commit 2b7ae1b27f
2 changed files with 39 additions and 0 deletions

View File

@ -1,3 +1,12 @@
2013-02-21 David S. Miller <davem@davemloft.net>
* sysdeps/unix/sysv/linux/sparc/lowlevellock.h
(FUTEX_WAIT_REQUEUE_PI): Define.
(FUTEX_CMP_REQUEUE_PI): Likewise.
(lll_futex_wait_requeue_pi): Likewise.
(lll_futex_timed_wait_requeue_pi): Likewise.
(lll_futex_cmp_requeue_pi): Likewise.
2013-02-21 Carlos O'Donell <carlos@redhat.com> 2013-02-21 Carlos O'Donell <carlos@redhat.com>
* sysdeps/unix/sysv/linux/fork.c: Fix comment typo. * sysdeps/unix/sysv/linux/fork.c: Fix comment typo.

View File

@ -37,6 +37,8 @@
#define FUTEX_TRYLOCK_PI 8 #define FUTEX_TRYLOCK_PI 8
#define FUTEX_WAIT_BITSET 9 #define FUTEX_WAIT_BITSET 9
#define FUTEX_WAKE_BITSET 10 #define FUTEX_WAKE_BITSET 10
#define FUTEX_WAIT_REQUEUE_PI 11
#define FUTEX_CMP_REQUEUE_PI 12
#define FUTEX_PRIVATE_FLAG 128 #define FUTEX_PRIVATE_FLAG 128
#define FUTEX_CLOCK_REALTIME 256 #define FUTEX_CLOCK_REALTIME 256
@ -157,6 +159,34 @@ extern void __cpu_relax (void);
}) })
#endif #endif
/* Priority Inheritance support. */
#define lll_futex_wait_requeue_pi(futexp, val, mutex, private) \
lll_futex_timed_wait_requeue_pi (futexp, val, NULL, 0, mutex, private)
#define lll_futex_timed_wait_requeue_pi(futexp, val, timespec, clockbit, \
mutex, private) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
long int __ret; \
int __op = FUTEX_WAIT_REQUEUE_PI | clockbit; \
\
__ret = INTERNAL_SYSCALL (futex, __err, 5, (futexp), \
__lll_private_flag (__op, private), \
(val), (timespec), mutex); \
INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \
})
#define lll_futex_cmp_requeue_pi(futexp, nr_wake, nr_move, mutex, val, priv) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
long int __ret; \
\
__ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \
__lll_private_flag (FUTEX_CMP_REQUEUE_PI, priv),\
(nr_wake), (nr_move), (mutex), (val)); \
INTERNAL_SYSCALL_ERROR_P (__ret, __err); \
})
static inline int static inline int
__attribute__ ((always_inline)) __attribute__ ((always_inline))
__lll_trylock (int *futex) __lll_trylock (int *futex)