]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
perf: overflow/perf_count_sw_cpu_clock crashes recent kernels
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Wed, 3 Aug 2011 11:49:31 +0000 (13:49 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 8 Aug 2011 17:23:22 +0000 (10:23 -0700)
The below patch is for -stable only, upstream has a much larger patch
that contains the below hunk in commit a8b0ca17b80e92faab46ee7179ba9e99ccb61233

Vince found that under certain circumstances software event overflows
go wrong and deadlock. Avoid trying to delete a timer from the timer
callback.

Reported-by: Vince Weaver <vweaver1@eecs.utk.edu>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
kernel/perf_event.c

index fc5ab8e444f03a4447371864e5b5c103975d5af0..37ebc14c9ce4861e5bffcbb80013c75633bf2e4e 100644 (file)
@@ -3694,12 +3694,8 @@ static int __perf_event_overflow(struct perf_event *event, int nmi,
        if (events && atomic_dec_and_test(&event->event_limit)) {
                ret = 1;
                event->pending_kill = POLL_HUP;
-               if (nmi) {
-                       event->pending_disable = 1;
-                       perf_pending_queue(&event->pending,
-                                          perf_pending_event);
-               } else
-                       perf_event_disable(event);
+               event->pending_disable = 1;
+               perf_pending_queue(&event->pending, perf_pending_event);
        }
 
        perf_event_output(event, nmi, data, regs);