diff options
| author | Peter Zijlstra <peterz@infradead.org> | 2015-01-23 11:19:48 +0100 |
|---|---|---|
| committer | Luis Henriques <luis.henriques@canonical.com> | 2015-02-04 10:58:30 +0000 |
| commit | 08446eea4a583919b979915f4dec2fa94ac6186c (patch) | |
| tree | c591cb69cfd4522aa79ba22b24436753847b56a3 /include | |
| parent | a2d1d5aad710be8f4bb39552756dbf72957096bf (diff) | |
perf: Tighten (and fix) the grouping condition
commit c3c87e770458aa004bd7ed3f29945ff436fd6511 upstream.
The fix from 9fc81d87420d ("perf: Fix events installation during
moving group") was incomplete in that it failed to recognise that
creating a group with events for different CPUs is semantically
broken -- they cannot be co-scheduled.
Furthermore, it leads to real breakage where, when we create an event
for CPU Y and then migrate it to form a group on CPU X, the code gets
confused where the counter is programmed -- triggered in practice
as well by me via the perf fuzzer.
Fix this by tightening the rules for creating groups. Only allow
grouping of counters that can be co-scheduled in the same context.
This means for the same task and/or the same cpu.
Fixes: 9fc81d87420d ("perf: Fix events installation during moving group")
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/20150123125834.090683288@infradead.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/perf_event.h | 6 |
1 files changed, 0 insertions, 6 deletions
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 707617a8c0f6..7e8445e9dcbf 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -453,11 +453,6 @@ struct perf_event { #endif /* CONFIG_PERF_EVENTS */ }; -enum perf_event_context_type { - task_context, - cpu_context, -}; - /** * struct perf_event_context - event context structure * @@ -465,7 +460,6 @@ enum perf_event_context_type { */ struct perf_event_context { struct pmu *pmu; - enum perf_event_context_type type; /* * Protect the states of the events in the list, * nr_active, and the list: |
