All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Vince Weaver <vincent.weaver@maine.edu>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Jiri Olsa <jolsa@redhat.com>, Paul Mackerras <paulus@samba.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ingo Molnar <mingo@kernel.org>
Subject: [PATCH 3.10 18/23] perf: Fix irq_work tail recursion
Date: Fri, 10 Apr 2015 15:19:12 +0200	[thread overview]
Message-ID: <20150410131614.186394987@linuxfoundation.org> (raw)
In-Reply-To: <20150410131613.364715133@linuxfoundation.org>

3.10-stable review patch.  If anyone has any objections, please let me know.

------------------

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);
 }
 
 /*



  parent reply	other threads:[~2015-04-10 14:04 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-10 13:18 [PATCH 3.10 00/23] 3.10.74-stable review Greg Kroah-Hartman
2015-04-10 13:18 ` [PATCH 3.10 01/23] ASoC: sgtl5000: remove useless register write clearing CHRGPUMP_POWERUP Greg Kroah-Hartman
2015-04-10 13:18 ` [PATCH 3.10 02/23] ASoC: cs4271: Fix wrong value references for boolean kctl Greg Kroah-Hartman
2015-04-10 13:18 ` [PATCH 3.10 03/23] ASoC: wm8960: " Greg Kroah-Hartman
2015-04-10 13:18 ` [PATCH 3.10 04/23] ASoC: tas5086: " Greg Kroah-Hartman
2015-04-10 13:18 ` [PATCH 3.10 05/23] ASoC: wm8731: " Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 06/23] ASoC: wm2000: " Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 07/23] ASoC: wm8903: " Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 08/23] ASoC: wm8904: " Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 09/23] ASoC: ak4641: " Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 10/23] ASoC: adav80x: " Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 11/23] ASoC: wm8955: " Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 12/23] tcm_fc: missing curly braces in ft_invl_hw_context() Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 13/23] tcm_qla2xxx: Fix incorrect use of __transport_register_session Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 14/23] nl80211: ignore HT/VHT capabilities without QoS/WMM Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 15/23] mac80211: disable u-APSD queues by default Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 16/23] mac80211: drop unencrypted frames in mesh fwding Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 17/23] Revert "iwlwifi: mvm: fix failure path when power_update fails in add_interface" Greg Kroah-Hartman
2015-04-10 13:19 ` Greg Kroah-Hartman [this message]
2015-04-10 13:19 ` [PATCH 3.10 19/23] vt6655: RFbSetPower fix missing rate RATE_12M Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 20/23] dm: hold suspend_lock while suspending device during device deletion Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 21/23] hfsplus: fix B-tree corruption after insertion at position 0 Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 22/23] powerpc/mpc85xx: Add ranges to etsec2 nodes Greg Kroah-Hartman
2015-04-10 13:19 ` [PATCH 3.10 23/23] net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3, 5} Greg Kroah-Hartman
2015-04-10 18:05 ` [PATCH 3.10 00/23] 3.10.74-stable review Guenter Roeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150410131614.186394987@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=acme@kernel.org \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=stable@vger.kernel.org \
    --cc=vincent.weaver@maine.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.