On Thu, Jun 23, 2016 at 07:26:52PM +0200, Thomas Gleixner wrote:
On Thu, 23 Jun 2016, Darren Hart wrote:
On Thu, Jun 23, 2016 at 03:40:36PM +0200, Thomas Gleixner wrote:
In my opinion, we should treat the timeout value as relative for FUTEX_WAIT
regardless of the CLOCK used.
Which requires even more changes as you have to select which clock you are
using for adding the base time.
Right, something like the following?
diff --git a/kernel/futex.c b/kernel/futex.c
index 33664f7..c39d807 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -3230,8 +3230,12 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
return -EINVAL;
t = timespec_to_ktime(ts);
- if (cmd == FUTEX_WAIT)
- t = ktime_add_safe(ktime_get(), t);
+ if (cmd == FUTEX_WAIT) {
+ if (cmd & FUTEX_CLOCK_REALTIME)
+ t = ktime_add_safe(ktime_get_real(), t);
+ else
+ t = ktime_add_safe(ktime_get(), t);
+ }
tp = &t;
}
/*
And as a follow-on, what is the reason for FUTEX_LOCK_PI only using
CLOCK_REALTIME? It seems reasonable to me that a user may want to wait a
specific amount of time, regardless of wall time.