diff options
author | Namhyung Kim <namhyung.kim@lge.com> | 2012-03-16 04:42:20 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-03-16 15:29:33 -0400 |
commit | 5090c6aea84dcc474d0aabf9f66f1eab68a143eb (patch) | |
tree | d8272837b2983c278a8ad2c778512909d23d7fec /tools/perf/util/evsel.c | |
parent | 4c19ea453d81cf8bd9bd446e6b129998f79997e7 (diff) |
perf tools: Do not disable members of group event
When event group is enabled for forked task (i.e. no target task/cpu
was specified) all events were disabled and marked ->enable_on_exec.
However they wouldn't be counted at all since only group leader will
be enabled on exec actually.
In contrast to perf stat, perf record doesn't have a real problem
as it enables all the event before proceeding. But it needs to be
fixed anyway IMHO.
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1331887340-32448-2-git-send-email-namhyung.kim@lge.com
Signed-off-by: Namhyung Kim <namhyung.kim@lge.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/evsel.c')
-rw-r--r-- | tools/perf/util/evsel.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index f421f7cbc0d3..0221700075c5 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c | |||
@@ -63,7 +63,8 @@ struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx) | |||
63 | return evsel; | 63 | return evsel; |
64 | } | 64 | } |
65 | 65 | ||
66 | void perf_evsel__config(struct perf_evsel *evsel, struct perf_record_opts *opts) | 66 | void perf_evsel__config(struct perf_evsel *evsel, struct perf_record_opts *opts, |
67 | struct perf_evsel *first) | ||
67 | { | 68 | { |
68 | struct perf_event_attr *attr = &evsel->attr; | 69 | struct perf_event_attr *attr = &evsel->attr; |
69 | int track = !evsel->idx; /* only the first counter needs these */ | 70 | int track = !evsel->idx; /* only the first counter needs these */ |
@@ -134,7 +135,8 @@ void perf_evsel__config(struct perf_evsel *evsel, struct perf_record_opts *opts) | |||
134 | attr->mmap = track; | 135 | attr->mmap = track; |
135 | attr->comm = track; | 136 | attr->comm = track; |
136 | 137 | ||
137 | if (!opts->target_pid && !opts->target_tid && !opts->system_wide) { | 138 | if (!opts->target_pid && !opts->target_tid && !opts->system_wide && |
139 | (!opts->group || evsel == first)) { | ||
138 | attr->disabled = 1; | 140 | attr->disabled = 1; |
139 | attr->enable_on_exec = 1; | 141 | attr->enable_on_exec = 1; |
140 | } | 142 | } |