• Zoran Markovic's avatar
    rtc: Keep system awake until all expired RTC timers are handled · 14d0e347
    Zoran Markovic authored
    Current implementation of RTC interface allows for system suspend to
    occur in the following cases:
    (a) if a timer is set in the past and rtc_timer_do_work() is scheduled
    to handle it, and
    (b) if rtc_timer_do_work() is called to handle expired timers whose
    handlers implement a preemption point.
    
    A pending suspend request may be honoured in the above cases causing
    timer handling to be delayed until after the next resume. This is
    undesirable since timer handlers may have time-critical code to execute.
    
    This patch makes sure that the system stays awake until all expired
    timers are handled.
    
    Note that all calls to pm_stay_awake() are eventually paired with
    the single pm_relax() call in rtc_timer_do_work(), which is launched
    using schedule_work().
    
    Cc: Alessandro Zummo <a.zummo@towertech.it>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: Arve Hjonnevag <arve@android.com>
    Cc: Todd Poynor <toddpoynor@google.com>
    Signed-off-by: default avatarZoran Markovic <zoran.markovic@linaro.org>
    Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
    14d0e347
interface.c 23.4 KB