]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
rtc: set the alarm to the next expiring timer
authorAlexandre Belloni <alexandre.belloni@free-electrons.com>
Thu, 28 Sep 2017 11:53:27 +0000 (13:53 +0200)
committerBen Hutchings <ben@decadent.org.uk>
Tue, 13 Feb 2018 18:32:08 +0000 (18:32 +0000)
commit 74717b28cb32e1ad3c1042cafd76b264c8c0f68d upstream.

If there is any non expired timer in the queue, the RTC alarm is never set.
This is an issue when adding a timer that expires before the next non
expired timer.

Ensure the RTC alarm is set in that case.

Fixes: 2b2f5ff00f63 ("rtc: interface: ignore expired timers when enqueuing new timers")
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
[bwh: Backported to 3.2: open-code ktime_before()]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/rtc/interface.c

index a623983b87168fbe97e973186a4e8515a5cae53c..3b58f94be227309bb88301cf5de5031af90c69b1 100644 (file)
@@ -765,7 +765,7 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
        }
 
        timerqueue_add(&rtc->timerqueue, &timer->node);
-       if (!next) {
+       if (!next || timer->node.expires.tv64 < next->expires.tv64) {
                struct rtc_wkalrm alarm;
                int err;
                alarm.time = rtc_ktime_to_tm(timer->node.expires);