Skip to content

Commit

Permalink
perf, x86: Fix double enable calls
Browse files Browse the repository at this point in the history
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@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
Cc: paulus@samba.org
Cc: eranian@google.com
Cc: robert.richter@amd.com
Cc: fweisbec@gmail.com
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Peter Zijlstra authored and Ingo Molnar committed Mar 10, 2010
1 parent 19925ce commit f3d46b2
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions arch/x86/kernel/cpu/perf_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit f3d46b2

Please sign in to comment.