Prev: Irish 2010 Grant Winner
Next: [tip:perf/urgent] perf, x86: Remove superfluous arguments to x86_perf_event_set_period()
From: tip-bot for Peter Zijlstra on 10 Mar 2010 08:20 Commit-ID: f3d46b2e6fa57547f9884330798792afc83f4b04 Gitweb: http://git.kernel.org/tip/f3d46b2e6fa57547f9884330798792afc83f4b04 Author: Peter Zijlstra <a.p.zijlstra(a)chello.nl> AuthorDate: Sat, 6 Mar 2010 13:24:58 +0100 Committer: Ingo Molnar <mingo(a)elte.hu> CommitDate: Wed, 10 Mar 2010 13:22:35 +0100 perf, x86: Fix double enable calls hw_perf_enable() would enable already enabled events. This causes problems with code that assumes that ->enable/->disable calls are balanced (like the LBR code does). What happens is that events that were already running and left in place would get enabled again. Avoid this by only enabling new events that match their previous assignment. Signed-off-by: Peter Zijlstra <a.p.zijlstra(a)chello.nl> Cc: Arnaldo Carvalho de Melo <acme(a)infradead.org> Cc: paulus(a)samba.org Cc: eranian(a)google.com Cc: robert.richter(a)amd.com Cc: fweisbec(a)gmail.com LKML-Reference: <new-submission> Signed-off-by: Ingo Molnar <mingo(a)elte.hu> --- arch/x86/kernel/cpu/perf_event.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index 045cc0b..1d665a0 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c @@ -835,6 +835,10 @@ void hw_perf_enable(void) event = cpuc->event_list[i]; hwc = &event->hw; + if (i < n_running && + match_prev_assignment(hwc, cpuc, i)) + continue; + if (hwc->idx == -1) x86_assign_hw_event(event, cpuc, i); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |