aboutsummaryrefslogtreecommitdiff
path: root/localversion-rt
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>2013-03-19 22:06:29 -0400
committerSteven Rostedt <rostedt@goodmis.org>2013-03-19 22:06:29 -0400
commit2d60d16dca7537bff987545244496ff7477051e0 (patch)
treec2e98ec773cfd06b5c9243960aa601275464a381 /localversion-rt
parent1f5e9a5685c9596d9fc28018608ee9385c060b9e (diff)
parent733c7943173143e29005c44b4fceb64302dd3098 (diff)
Merge tag 'v3.2.40' into v3.2-rt
This is the 3.2.40 stable release Conflicts: kernel/hrtimer.c Solved with: diff --cc kernel/hrtimer.c index 9c09d02,cdd5607..0000000 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@@ -1054,19 -982,20 +1032,39 @@@ int __hrtimer_start_range_ns(struct hrt * * XXX send_remote_softirq() ? */ - if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases)) { - ret = hrtimer_enqueue_reprogram(timer, new_base, wakeup); - if (ret) { + if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases) + && hrtimer_enqueue_reprogram(timer, new_base)) { - if (wakeup) { ++ ++ if (wakeup ++#ifdef CONFIG_PREEMPT_RT_BASE ++ /* ++ * Move softirq based timers away from the rbtree in ++ * case it expired already. Otherwise we would have a ++ * stale base->first entry until the softirq runs. ++ */ ++ && hrtimer_rt_defer(timer) ++#endif ++ ) { /* - * In case we failed to reprogram the timer (mostly - * because out current timer is already elapsed), - * remove it again and report a failure. This avoids - * stale base->first entries. + * We need to drop cpu_base->lock to avoid a + * lock ordering issue vs. rq->lock. */ - debug_deactivate(timer); - __remove_hrtimer(timer, new_base, - timer->state & HRTIMER_STATE_CALLBACK, 0); + raw_spin_unlock(&new_base->cpu_base->lock); + raise_softirq_irqoff(HRTIMER_SOFTIRQ); + local_irq_restore(flags); + return ret; - } else { - __raise_softirq_irqoff(HRTIMER_SOFTIRQ); } ++ ++ /* ++ * In case we failed to reprogram the timer (mostly ++ * because out current timer is already elapsed), ++ * remove it again and report a failure. This avoids ++ * stale base->first entries. ++ */ ++ debug_deactivate(timer); ++ __remove_hrtimer(timer, new_base, ++ timer->state & HRTIMER_STATE_CALLBACK, 0); ++ ret = -ETIME; } unlock_hrtimer_base(timer, &flags); Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'localversion-rt')
0 files changed, 0 insertions, 0 deletions