From 65fca2a9873c434ac1d047863c48b46b93dae230 Mon Sep 17 00:00:00 2001 From: Jeff Ohlstein Date: Fri, 18 Nov 2011 15:47:10 -0800 Subject: [PATCH] --- yaml --- r: 275971 b: refs/heads/master c: 27c9cd7e601632b3794e1c3344d37b86917ffb43 h: refs/heads/master i: 275969: 8ae809b384131baf37ffdbbff4bf78291f0e2dc9 275967: 4665482de4227e1a9af127f0134a4110973a876d v: v3 --- [refs] | 2 +- trunk/kernel/hrtimer.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index e623caa4e6f1..a2e90877d22b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d004e024058a0eaca097513ce62cbcf978913e0a +refs/heads/master: 27c9cd7e601632b3794e1c3344d37b86917ffb43 diff --git a/trunk/kernel/hrtimer.c b/trunk/kernel/hrtimer.c index a9205e32a059..2043c08d36c8 100644 --- a/trunk/kernel/hrtimer.c +++ b/trunk/kernel/hrtimer.c @@ -885,10 +885,13 @@ static void __remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base, unsigned long newstate, int reprogram) { + struct timerqueue_node *next_timer; if (!(timer->state & HRTIMER_STATE_ENQUEUED)) goto out; - if (&timer->node == timerqueue_getnext(&base->active)) { + next_timer = timerqueue_getnext(&base->active); + timerqueue_del(&base->active, &timer->node); + if (&timer->node == next_timer) { #ifdef CONFIG_HIGH_RES_TIMERS /* Reprogram the clock event device. if enabled */ if (reprogram && hrtimer_hres_active()) { @@ -901,7 +904,6 @@ static void __remove_hrtimer(struct hrtimer *timer, } #endif } - timerqueue_del(&base->active, &timer->node); if (!timerqueue_getnext(&base->active)) base->cpu_base->active_bases &= ~(1 << base->index); out: