summaryrefslogtreecommitdiff
path: root/drivers/rtc
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2011-01-10 17:18:52 -0800
committerColin Cross <ccross@android.com>2011-01-10 17:18:52 -0800
commit1fb62ec46a714b133d2b3297264a142154809e6e (patch)
tree712d6b6fb93dc715a31115e132735cc9ef877926 /drivers/rtc
parent5ca2c0f1ccfcbc22a78e0967bf146e29f1a311c1 (diff)
parent78d2a8274115727ab3864584abee09d3021de9c6 (diff)
Merge branch 'android-2.6.36' into android-tegra-2.6.36
Diffstat (limited to 'drivers/rtc')
-rw-r--r--drivers/rtc/alarm.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/rtc/alarm.c b/drivers/rtc/alarm.c
index 1250edfbdf33..b445a8675850 100644
--- a/drivers/rtc/alarm.c
+++ b/drivers/rtc/alarm.c
@@ -109,12 +109,15 @@ static void alarm_enqueue_locked(struct alarm *alarm)
struct rb_node *parent = NULL;
struct alarm *entry;
int leftmost = 1;
+ bool was_first = false;
pr_alarm(FLOW, "added alarm, type %d, func %pF at %lld\n",
alarm->type, alarm->function, ktime_to_ns(alarm->expires));
- if (base->first == &alarm->node)
+ if (base->first == &alarm->node) {
base->first = rb_next(&alarm->node);
+ was_first = true;
+ }
if (!RB_EMPTY_NODE(&alarm->node)) {
rb_erase(&alarm->node, &base->alarms);
RB_CLEAR_NODE(&alarm->node);
@@ -134,10 +137,10 @@ static void alarm_enqueue_locked(struct alarm *alarm)
leftmost = 0;
}
}
- if (leftmost) {
+ if (leftmost)
base->first = &alarm->node;
- update_timer_locked(base, false);
- }
+ if (leftmost || was_first)
+ update_timer_locked(base, was_first);
rb_link_node(&alarm->node, parent, link);
rb_insert_color(&alarm->node, &base->alarms);