• Pierre Peiffer's avatar
    Make futex_wait() use an hrtimer for timeout · c19384b5
    Pierre Peiffer authored
    This patch modifies futex_wait() to use an hrtimer + schedule() in place of
    schedule_timeout().
    
    schedule_timeout() is tick based, therefore the timeout granularity is the
    tick (1 ms, 4 ms or 10 ms depending on HZ).  By using a high resolution timer
    for timeout wakeup, we can attain a much finer timeout granularity (in the
    microsecond range).  This parallels what is already done for futex_lock_pi().
    
    The timeout passed to the syscall is no longer converted to jiffies and is
    therefore passed to do_futex() and futex_wait() as an absolute ktime_t
    therefore keeping nanosecond resolution.
    
    Also this removes the need to pass the nanoseconds timeout part to
    futex_lock_pi() in val2.
    
    In futex_wait(), if there is no timeout then a regular schedule() is
    performed.  Otherwise, an hrtimer is fired before schedule() is called.
    
    [akpm@linux-foundation.org: fix `make headers_check']
    Signed-off-by: default avatarSebastien Dugue <sebastien.dugue@bull.net>
    Signed-off-by: default avatarPierre Peiffer <pierre.peiffer@bull.net>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Ulrich Drepper <drepper@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c19384b5
futex.c 45.3 KB