Messages in this thread Patch in this message | | | Date | Mon, 20 Jun 2016 16:26:52 +0200 | From | Matthieu CASTET <> | Subject | futex: Allow FUTEX_CLOCK_REALTIME with FUTEX_WAIT op |
| |
Hi,
the commit 337f13046ff03717a9e99675284a817527440a49 is saying that it change to syscall to an equivalent to FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME with a bitset of FUTEX_BITSET_MATCH_ANY.
It seems wrong to me, because in case of FUTEX_WAIT, in "SYSCALL_DEFINE6(futex", we convert relative timeout to absolute timeout [1].
So FUTEX_CLOCK_REALTIME | FUTEX_WAIT is expecting a relative timeout when FUTEX_WAIT_BITSET take an absolute timeout.
To make it work you have to use something like the (untested) attached patch.
Matthieu
[1] if (cmd == FUTEX_WAIT) t = ktime_add_safe(ktime_get(), t);diff --git a/kernel/futex.c b/kernel/futex.c index 33664f7..4bee915 100644 --- a/kernel/futex.c +++ b/kernel/futex.c @@ -3230,7 +3230,7 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val, return -EINVAL; t = timespec_to_ktime(ts); - if (cmd == FUTEX_WAIT) + if (cmd == FUTEX_WAIT && !(op & FUTEX_CLOCK_REALTIME)) t = ktime_add_safe(ktime_get(), t); tp = &t; } | |