• zhuo-hao's avatar
    alarmtimer: Avoid unexpected rtc interrupt when system resume from S3 · a0e3213f
    zhuo-hao authored
    Before the system go to suspend (S3), if user create a timer
    with clockid CLOCK_REALTIME_ALARM/CLOCK_BOOTTIME_ALARM and set a
    "large" timeout value to this timer. The function
    alarmtimer_suspend will be called to setup a timeout value to
    RTC timer to avoid the system sleep over time. However, if the
    system wakeup early than RTC timeout, the RTC timer will not be
    cleared. And this will cause the hpet_rtc_interrupt come
    unexpectedly until the RTC timeout. To fix this problem, just
    adding alarmtimer_resume to cancel the RTC timer.
    
    This was noticed because the HPET RTC emulation fires an
    interrupt every 16ms(=1/2^DEFAULT_RTC_SHIFT) up to the point
    where the alarm time is reached.
    
    This program always hits this situation
    (https://lkml.org/lkml/2015/11/8/326), if system wake up earlier
    than alarm time.
    
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: John Stultz <john.stultz@linaro.org>
    Signed-off-by: default avatarZhuo-hao Lee <zhuo-hao.lee@intel.com>
    [jstultz: Tweak commit subject & formatting slightly]
    Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
    a0e3213f
alarmtimer.c 21.5 KB