]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 6 Apr 2015 19:01:10 +0000 (21:01 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 6 Apr 2015 19:01:10 +0000 (21:01 +0200)
added patches:
perf-fix-irq_work-tail-recursion.patch
vt6655-rfbsetpower-fix-missing-rate-rate_12m.patch

queue-3.10/perf-fix-irq_work-tail-recursion.patch [new file with mode: 0644]
queue-3.10/series
queue-3.10/vt6655-rfbsetpower-fix-missing-rate-rate_12m.patch [new file with mode: 0644]

diff --git a/queue-3.10/perf-fix-irq_work-tail-recursion.patch b/queue-3.10/perf-fix-irq_work-tail-recursion.patch
new file mode 100644 (file)
index 0000000..9efb7d2
--- /dev/null
@@ -0,0 +1,78 @@
+From d525211f9d1be8b523ec7633f080f2116f5ea536 Mon Sep 17 00:00:00 2001
+From: Peter Zijlstra <peterz@infradead.org>
+Date: Thu, 19 Feb 2015 18:03:11 +0100
+Subject: perf: Fix irq_work 'tail' recursion
+
+From: Peter Zijlstra <peterz@infradead.org>
+
+commit d525211f9d1be8b523ec7633f080f2116f5ea536 upstream.
+
+Vince reported a watchdog lockup like:
+
+       [<ffffffff8115e114>] perf_tp_event+0xc4/0x210
+       [<ffffffff810b4f8a>] perf_trace_lock+0x12a/0x160
+       [<ffffffff810b7f10>] lock_release+0x130/0x260
+       [<ffffffff816c7474>] _raw_spin_unlock_irqrestore+0x24/0x40
+       [<ffffffff8107bb4d>] do_send_sig_info+0x5d/0x80
+       [<ffffffff811f69df>] send_sigio_to_task+0x12f/0x1a0
+       [<ffffffff811f71ce>] send_sigio+0xae/0x100
+       [<ffffffff811f72b7>] kill_fasync+0x97/0xf0
+       [<ffffffff8115d0b4>] perf_event_wakeup+0xd4/0xf0
+       [<ffffffff8115d103>] perf_pending_event+0x33/0x60
+       [<ffffffff8114e3fc>] irq_work_run_list+0x4c/0x80
+       [<ffffffff8114e448>] irq_work_run+0x18/0x40
+       [<ffffffff810196af>] smp_trace_irq_work_interrupt+0x3f/0xc0
+       [<ffffffff816c99bd>] trace_irq_work_interrupt+0x6d/0x80
+
+Which is caused by an irq_work generating new irq_work and therefore
+not allowing forward progress.
+
+This happens because processing the perf irq_work triggers another
+perf event (tracepoint stuff) which in turn generates an irq_work ad
+infinitum.
+
+Avoid this by raising the recursion counter in the irq_work -- which
+effectively disables all software events (including tracepoints) from
+actually triggering again.
+
+Reported-by: Vince Weaver <vincent.weaver@maine.edu>
+Tested-by: Vince Weaver <vincent.weaver@maine.edu>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
+Cc: Jiri Olsa <jolsa@redhat.com>
+Cc: Paul Mackerras <paulus@samba.org>
+Cc: Steven Rostedt <rostedt@goodmis.org>
+Link: http://lkml.kernel.org/r/20150219170311.GH21418@twins.programming.kicks-ass.net
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/events/core.c |   10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/kernel/events/core.c
++++ b/kernel/events/core.c
+@@ -4007,6 +4007,13 @@ static void perf_pending_event(struct ir
+ {
+       struct perf_event *event = container_of(entry,
+                       struct perf_event, pending);
++      int rctx;
++
++      rctx = perf_swevent_get_recursion_context();
++      /*
++       * If we 'fail' here, that's OK, it means recursion is already disabled
++       * and we won't recurse 'further'.
++       */
+       if (event->pending_disable) {
+               event->pending_disable = 0;
+@@ -4017,6 +4024,9 @@ static void perf_pending_event(struct ir
+               event->pending_wakeup = 0;
+               perf_event_wakeup(event);
+       }
++
++      if (rctx >= 0)
++              perf_swevent_put_recursion_context(rctx);
+ }
+ /*
index d2107c7e5a04f587ac666beb1795460412f2c6c5..eaffb21041f5bdcb22abd6193afa88893c990e32 100644 (file)
@@ -15,3 +15,5 @@ nl80211-ignore-ht-vht-capabilities-without-qos-wmm.patch
 mac80211-disable-u-apsd-queues-by-default.patch
 mac80211-drop-unencrypted-frames-in-mesh-fwding.patch
 revert-iwlwifi-mvm-fix-failure-path-when-power_update.patch
+perf-fix-irq_work-tail-recursion.patch
+vt6655-rfbsetpower-fix-missing-rate-rate_12m.patch
diff --git a/queue-3.10/vt6655-rfbsetpower-fix-missing-rate-rate_12m.patch b/queue-3.10/vt6655-rfbsetpower-fix-missing-rate-rate_12m.patch
new file mode 100644 (file)
index 0000000..12ba1bd
--- /dev/null
@@ -0,0 +1,29 @@
+From 40c8790bcb7ac74f3038153cd09310e220c6a1df Mon Sep 17 00:00:00 2001
+From: Malcolm Priestley <tvboxspy@gmail.com>
+Date: Sat, 7 Mar 2015 17:04:54 +0000
+Subject: vt6655: RFbSetPower fix missing rate RATE_12M
+
+From: Malcolm Priestley <tvboxspy@gmail.com>
+
+commit 40c8790bcb7ac74f3038153cd09310e220c6a1df upstream.
+
+When the driver sets this rate a power of zero value is set causing
+data flow stoppage until another rate is tried.
+
+Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/staging/vt6655/rf.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/staging/vt6655/rf.c
++++ b/drivers/staging/vt6655/rf.c
+@@ -966,6 +966,7 @@ bool RFbSetPower(
+               break;
+       case RATE_6M:
+       case RATE_9M:
++      case RATE_12M:
+       case RATE_18M:
+               byPwr = pDevice->abyOFDMPwrTbl[uCH];
+               if (pDevice->byRFType == RF_UW2452) {