Skip to content

Commit

Permalink
x86*: Return syscall error for lll_futex_wake.
Browse files Browse the repository at this point in the history
It is very very possible that the futex syscall returns an
error and that the caller of lll_futex_wake may want to
look at that error and propagate the failure.

This patch allows a caller to see the syscall error.

There are no users of the syscall error at present, but
future cleanups are now be able to check for the error.

--

nplt/

2013-06-10  Carlos O'Donell  <carlos@redhat.com>

	* sysdeps/unix/sysv/linux/i386/lowlevellock.h
	(lll_futex_wake): Return syscall error.
	* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
	(lll_futex_wake): Return syscall error.
  • Loading branch information
Carlos O'Donell committed Jun 10, 2013
1 parent 0efa6f8 commit be11d71
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 8 deletions.
7 changes: 7 additions & 0 deletions nptl/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
2013-06-10 Carlos O'Donell <carlos@redhat.com>

* sysdeps/unix/sysv/linux/i386/lowlevellock.h
(lll_futex_wake): Return syscall error.
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
(lll_futex_wake): Return syscall error.

2013-08-06 Ondřej Bílka <neleai@seznam.cz>

* sysdeps/pthread/allocalim.h: (__libc_use_alloca): Fix warning.
Expand Down
9 changes: 5 additions & 4 deletions nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
Original file line number Diff line number Diff line change
Expand Up @@ -224,20 +224,21 @@ LLL_STUB_UNWIND_INFO_END


#define lll_futex_wake(futex, nr, private) \
do { \
int __ignore; \
({ \
int __status; \
register __typeof (nr) _nr asm ("edx") = (nr); \
LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
__asm __volatile (LLL_EBX_LOAD \
LLL_ENTER_KERNEL \
LLL_EBX_LOAD \
: "=a" (__ignore) \
: "=a" (__status) \
: "0" (SYS_futex), LLL_EBX_REG (futex), \
"c" (__lll_private_flag (FUTEX_WAKE, private)), \
"d" (_nr), \
"i" (0) /* phony, to align next arg's number */, \
"i" (offsetof (tcbhead_t, sysinfo))); \
} while (0)
__status; \
})


/* NB: in the lll_trylock macro we simply return the value in %eax
Expand Down
9 changes: 5 additions & 4 deletions nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
Original file line number Diff line number Diff line change
Expand Up @@ -225,17 +225,18 @@ LLL_STUB_UNWIND_INFO_END


#define lll_futex_wake(futex, nr, private) \
do { \
int __ignore; \
({ \
int __status; \
register __typeof (nr) _nr __asm ("edx") = (nr); \
LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
__asm __volatile ("syscall" \
: "=a" (__ignore) \
: "=a" (__status) \
: "0" (SYS_futex), "D" (futex), \
"S" (__lll_private_flag (FUTEX_WAKE, private)), \
"d" (_nr) \
: "memory", "cc", "r10", "r11", "cx"); \
} while (0)
__status; \
})


/* NB: in the lll_trylock macro we simply return the value in %eax
Expand Down

0 comments on commit be11d71

Please sign in to comment.