diff options
author | Steven Rostedt (Red Hat) <rostedt@goodmis.org> | 2013-03-19 14:16:11 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2013-03-19 14:16:11 -0400 |
commit | 053250334fc6ea67f59919f54ad3e128498cd2d0 (patch) | |
tree | 36ef8671933a8cecfa0154e564530717465315e7 /drivers/pcmcia/vrc4171_card.c | |
parent | fb328d29f2b79553960a2ec6436a6408afd4db82 (diff) | |
parent | 048b6fe6dccb105512147eb47accbb1431b4e54b (diff) |
Merge tag 'v3.4.34' into v3.4-rt
This is the 3.4.34 stable release
Conflicts:
kernel/hrtimer.c
Solved with:
diff --cc kernel/hrtimer.c
index 9114899,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 'drivers/pcmcia/vrc4171_card.c')
-rw-r--r-- | drivers/pcmcia/vrc4171_card.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/pcmcia/vrc4171_card.c b/drivers/pcmcia/vrc4171_card.c index 86e4a1a3c642..6bb02ab5dd9a 100644 --- a/drivers/pcmcia/vrc4171_card.c +++ b/drivers/pcmcia/vrc4171_card.c @@ -246,6 +246,7 @@ static int pccard_init(struct pcmcia_socket *sock) socket = &vrc4171_sockets[slot]; socket->csc_irq = search_nonuse_irq(); socket->io_irq = search_nonuse_irq(); + spin_lock_init(&socket->lock); return 0; } |