projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nvmem: rockchip-efuse: Fix dependencies
[firefly-linux-kernel-4.4.55.git]
/
drivers
/
rtc
/
interface.c
diff --git
a/drivers/rtc/interface.c
b/drivers/rtc/interface.c
index 5836751b8203eb576a7af9f049c706ba27ee8d93..9bb934ed2a7a04adbb571e88c634f4ad97bb84f9 100644
(file)
--- a/
drivers/rtc/interface.c
+++ b/
drivers/rtc/interface.c
@@
-748,9
+748,23
@@
EXPORT_SYMBOL_GPL(rtc_irq_set_freq);
*/
static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
{
*/
static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
{
+ struct timerqueue_node *next = timerqueue_getnext(&rtc->timerqueue);
+ struct rtc_time tm;
+ ktime_t now;
+
timer->enabled = 1;
timer->enabled = 1;
+ __rtc_read_time(rtc, &tm);
+ now = rtc_tm_to_ktime(tm);
+
+ /* Skip over expired timers */
+ while (next) {
+ if (next->expires.tv64 >= now.tv64)
+ break;
+ next = timerqueue_iterate_next(next);
+ }
+
timerqueue_add(&rtc->timerqueue, &timer->node);
timerqueue_add(&rtc->timerqueue, &timer->node);
- if (
&timer->node == timerqueue_getnext(&rtc->timerqueue)
) {
+ if (
!next
) {
struct rtc_wkalrm alarm;
int err;
alarm.time = rtc_ktime_to_tm(timer->node.expires);
struct rtc_wkalrm alarm;
int err;
alarm.time = rtc_ktime_to_tm(timer->node.expires);