rtc: Keep system awake until all expired RTC timers are handled
authorZoran Markovic <zoran.markovic@linaro.org>
Wed, 26 Jun 2013 23:09:13 +0000 (16:09 -0700)
committerJohn Stultz <john.stultz@linaro.org>
Mon, 22 Jul 2013 16:38:25 +0000 (09:38 -0700)
commit14d0e347ea2db51144a8800d7c7576db96f69983
treefd56f98424f8f9517ba6be8f8de4fb67147fe828
parent07862c1cd6675cde2dd4bd64e64d704ea2185b79
rtc: Keep system awake until all expired RTC timers are handled

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: Zoran Markovic <zoran.markovic@linaro.org>
Signed-off-by: John Stultz <john.stultz@linaro.org>
drivers/rtc/interface.c