diff options
-rw-r--r-- | tools/perf/util/evlist.c | 6 | ||||
-rw-r--r-- | tools/perf/util/evsel.c | 6 | ||||
-rw-r--r-- | tools/perf/util/evsel.h | 3 |
3 files changed, 10 insertions, 5 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 159263d17c2d..1986d8051bd1 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
@@ -51,13 +51,15 @@ struct perf_evlist *perf_evlist__new(struct cpu_map *cpus, | |||
51 | void perf_evlist__config_attrs(struct perf_evlist *evlist, | 51 | void perf_evlist__config_attrs(struct perf_evlist *evlist, |
52 | struct perf_record_opts *opts) | 52 | struct perf_record_opts *opts) |
53 | { | 53 | { |
54 | struct perf_evsel *evsel; | 54 | struct perf_evsel *evsel, *first; |
55 | 55 | ||
56 | if (evlist->cpus->map[0] < 0) | 56 | if (evlist->cpus->map[0] < 0) |
57 | opts->no_inherit = true; | 57 | opts->no_inherit = true; |
58 | 58 | ||
59 | first = list_entry(evlist->entries.next, struct perf_evsel, node); | ||
60 | |||
59 | list_for_each_entry(evsel, &evlist->entries, node) { | 61 | list_for_each_entry(evsel, &evlist->entries, node) { |
60 | perf_evsel__config(evsel, opts); | 62 | perf_evsel__config(evsel, opts, first); |
61 | 63 | ||
62 | if (evlist->nr_entries > 1) | 64 | if (evlist->nr_entries > 1) |
63 | evsel->attr.sample_type |= PERF_SAMPLE_ID; | 65 | evsel->attr.sample_type |= PERF_SAMPLE_ID; |
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 | } |
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 326b8e4d5035..3158ca3d69a1 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h | |||
@@ -80,7 +80,8 @@ void perf_evsel__exit(struct perf_evsel *evsel); | |||
80 | void perf_evsel__delete(struct perf_evsel *evsel); | 80 | void perf_evsel__delete(struct perf_evsel *evsel); |
81 | 81 | ||
82 | void perf_evsel__config(struct perf_evsel *evsel, | 82 | void perf_evsel__config(struct perf_evsel *evsel, |
83 | struct perf_record_opts *opts); | 83 | struct perf_record_opts *opts, |
84 | struct perf_evsel *first); | ||
84 | 85 | ||
85 | int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads); | 86 | int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads); |
86 | int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads); | 87 | int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads); |