From e9aea995f11aa4b54db027c77e21778f8726fcdd Mon Sep 17 00:00:00 2001 From: Darren Hart Date: Fri, 3 Apr 2009 13:40:22 -0700 Subject: [PATCH] --- yaml --- r: 145861 b: refs/heads/master c: a72188d8a64ebe74722f1cf7ffac41b41ffdba21 h: refs/heads/master i: 145859: b7c988950779d997d72ac8eb8913111fca3f9782 v: v3 --- [refs] | 2 +- trunk/kernel/futex.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 768cc973da60..baac72a07a67 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8dac456a681bd94272ff50ecb31be6b669382c2b +refs/heads/master: a72188d8a64ebe74722f1cf7ffac41b41ffdba21 diff --git a/trunk/kernel/futex.c b/trunk/kernel/futex.c index af831fbb7fb4..6b597cf33b02 100644 --- a/trunk/kernel/futex.c +++ b/trunk/kernel/futex.c @@ -1252,6 +1252,7 @@ static int fixup_pi_state_owner(u32 __user *uaddr, struct futex_q *q, */ #define FLAGS_SHARED 0x01 #define FLAGS_CLOCKRT 0x02 +#define FLAGS_HAS_TIMEOUT 0x04 static long futex_wait_restart(struct restart_block *restart); @@ -1486,7 +1487,7 @@ static int futex_wait(u32 __user *uaddr, int fshared, restart->futex.val = val; restart->futex.time = abs_time->tv64; restart->futex.bitset = bitset; - restart->futex.flags = 0; + restart->futex.flags = FLAGS_HAS_TIMEOUT; if (fshared) restart->futex.flags |= FLAGS_SHARED; @@ -1510,13 +1511,16 @@ static long futex_wait_restart(struct restart_block *restart) { u32 __user *uaddr = (u32 __user *)restart->futex.uaddr; int fshared = 0; - ktime_t t; + ktime_t t, *tp = NULL; - t.tv64 = restart->futex.time; + if (restart->futex.flags & FLAGS_HAS_TIMEOUT) { + t.tv64 = restart->futex.time; + tp = &t; + } restart->fn = do_no_restart_syscall; if (restart->futex.flags & FLAGS_SHARED) fshared = 1; - return (long)futex_wait(uaddr, fshared, restart->futex.val, &t, + return (long)futex_wait(uaddr, fshared, restart->futex.val, tp, restart->futex.bitset, restart->futex.flags & FLAGS_CLOCKRT); }