• Thomas Gleixner's avatar
    hrtimer: Handle remaining time proper for TIME_LOW_RES · e7989996
    Thomas Gleixner authored
    commit 203cbf77 upstream.
    
    If CONFIG_TIME_LOW_RES is enabled we add a jiffie to the relative timeout to
    prevent short sleeps, but we do not account for that in interfaces which
    retrieve the remaining time.
    
    Helge observed that timerfd can return a remaining time larger than the
    relative timeout. That's not expected and breaks userland test programs.
    
    Store the information that the timer was armed relative and provide functions
    to adjust the remaining time. To avoid bloating the hrtimer struct make state
    a u8, which as a bonus results in better code on x86 at least.
    Reported-and-tested-by: default avatarHelge Deller <deller@gmx.de>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: linux-m68k@lists.linux-m68k.org
    Cc: dhowells@redhat.com
    Link: http://lkml.kernel.org/r/20160114164159.273328486@linutronix.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    [bwh: Backported to 3.2:
     - Use #ifdef instead of IS_ENABLED() as that doesn't work for config
       symbols that don't exist on the current architecture
     - Use KTIME_LOW_RES directly instead of hrtimer_resolution
     - Use ktime_sub() instead of modifying ktime::tv64 directly
     - Adjust filename, context]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    e7989996
hrtimer.c 48.6 KB