diff options
| author | Igor Mammedov <niallain@gmail.com> | 2008-04-28 23:08:21 +0000 |
|---|---|---|
| committer | Steve French <sfrench@us.ibm.com> | 2008-04-28 23:08:21 +0000 |
| commit | e9f20d6f03e8df393b001dab6dc5226c2a5daf57 (patch) | |
| tree | 73e94fa5e4f83576c97e36187b809c5aad2ade30 /kernel/hrtimer.c | |
| parent | bf62fd887cab230f5952b611bde25e8e15acb454 (diff) | |
| parent | e31a94ed371c70855eb30b77c490d6d85dd4da26 (diff) | |
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'kernel/hrtimer.c')
| -rw-r--r-- | kernel/hrtimer.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index f78777abe769..e379ef0e9c20 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -1080,8 +1080,19 @@ static void run_hrtimer_pending(struct hrtimer_cpu_base *cpu_base) * If the timer was rearmed on another CPU, reprogram * the event device. */ - if (timer->base->first == &timer->node) - hrtimer_reprogram(timer, timer->base); + struct hrtimer_clock_base *base = timer->base; + + if (base->first == &timer->node && + hrtimer_reprogram(timer, base)) { + /* + * Timer is expired. Thus move it from tree to + * pending list again. + */ + __remove_hrtimer(timer, base, + HRTIMER_STATE_PENDING, 0); + list_add_tail(&timer->cb_entry, + &base->cpu_base->cb_pending); + } } } spin_unlock_irq(&cpu_base->lock); |
