]>
Commit | Line | Data |
---|---|---|
632d9a26 GKH |
1 | From a.p.zijlstra@chello.nl Tue Aug 2 09:32:36 2011 |
2 | From: Peter Zijlstra <a.p.zijlstra@chello.nl> | |
3 | Date: Thu, 28 Jul 2011 20:47:10 +0200 | |
4 | Subject: perf: Fix software event overflow | |
5 | To: Vince Weaver <vweaver1@eecs.utk.edu> | |
6 | Cc: Ingo Molnar <mingo@elte.hu>, Paul Mackerras <paulus@samba.org>, linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo <acme@ghostprotocols.net>, stable <stable@kernel.org> | |
7 | Message-ID: <1311878830.2617.373.camel@laptop> | |
8 | ||
9 | From: Peter Zijlstra <a.p.zijlstra@chello.nl> | |
10 | ||
11 | The below patch is for -stable only, upstream has a much larger patch | |
12 | that contains the below hunk in commit a8b0ca17b80e92faab46ee7179ba9e99ccb61233 | |
13 | ||
14 | Vince found that under certain circumstances software event overflows | |
15 | go wrong and deadlock. Avoid trying to delete a timer from the timer | |
16 | callback. | |
17 | ||
18 | Reported-by: Vince Weaver <vweaver1@eecs.utk.edu> | |
19 | Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> | |
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | |
21 | ||
22 | --- | |
23 | kernel/events/core.c | 7 ++----- | |
24 | 1 file changed, 2 insertions(+), 5 deletions(-) | |
25 | ||
26 | --- a/kernel/events/core.c | |
27 | +++ b/kernel/events/core.c | |
28 | @@ -5016,11 +5016,8 @@ static int __perf_event_overflow(struct | |
29 | if (events && atomic_dec_and_test(&event->event_limit)) { | |
30 | ret = 1; | |
31 | event->pending_kill = POLL_HUP; | |
32 | - if (nmi) { | |
33 | - event->pending_disable = 1; | |
34 | - irq_work_queue(&event->pending); | |
35 | - } else | |
36 | - perf_event_disable(event); | |
37 | + event->pending_disable = 1; | |
38 | + irq_work_queue(&event->pending); | |
39 | } | |
40 | ||
41 | if (event->overflow_handler) |