aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rtc/interface.c')
-rw-r--r--drivers/rtc/interface.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
index c07ffa5a0501..8d85cf385e09 100644
--- a/drivers/rtc/interface.c
+++ b/drivers/rtc/interface.c
@@ -748,9 +748,23 @@ EXPORT_SYMBOL_GPL(rtc_irq_set_freq);
748 */ 748 */
749static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer) 749static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
750{ 750{
751 struct timerqueue_node *next = timerqueue_getnext(&rtc->timerqueue);
752 struct rtc_time tm;
753 ktime_t now;
754
751 timer->enabled = 1; 755 timer->enabled = 1;
756 __rtc_read_time(rtc, &tm);
757 now = rtc_tm_to_ktime(tm);
758
759 /* Skip over expired timers */
760 while (next) {
761 if (next->expires.tv64 >= now.tv64)
762 break;
763 next = timerqueue_iterate_next(next);
764 }
765
752 timerqueue_add(&rtc->timerqueue, &timer->node); 766 timerqueue_add(&rtc->timerqueue, &timer->node);
753 if (&timer->node == timerqueue_getnext(&rtc->timerqueue)) { 767 if (!next) {
754 struct rtc_wkalrm alarm; 768 struct rtc_wkalrm alarm;
755 int err; 769 int err;
756 alarm.time = rtc_ktime_to_tm(timer->node.expires); 770 alarm.time = rtc_ktime_to_tm(timer->node.expires);