Skip to content

Commit

Permalink
perf evlist: Add perf_evlist__set_tracking_event()
Browse files Browse the repository at this point in the history
Add a function to change which event is used to track mmap, comm and
task events.

This is needed with Instruction Tracing because the Instruction Tracing
event must come first but cannot be used for tracking because it will be
disabled under some circumstances.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1406786474-9306-10-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Adrian Hunter authored and Arnaldo Carvalho de Melo committed Aug 13, 2014
1 parent bf8e8f4 commit 60b0896
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 2 deletions.
17 changes: 17 additions & 0 deletions tools/perf/util/evlist.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
{
list_add_tail(&entry->node, &evlist->entries);
entry->idx = evlist->nr_entries;
entry->tracking = !entry->idx;

if (!evlist->nr_entries++)
perf_evlist__set_id_pos(evlist);
Expand Down Expand Up @@ -1295,3 +1296,19 @@ void perf_evlist__to_front(struct perf_evlist *evlist,

list_splice(&move, &evlist->entries);
}

void perf_evlist__set_tracking_event(struct perf_evlist *evlist,
struct perf_evsel *tracking_evsel)
{
struct perf_evsel *evsel;

if (tracking_evsel->tracking)
return;

evlist__for_each(evlist, evsel) {
if (evsel != tracking_evsel)
evsel->tracking = false;
}

tracking_evsel->tracking = true;
}
3 changes: 3 additions & 0 deletions tools/perf/util/evlist.h
Original file line number Diff line number Diff line change
Expand Up @@ -262,4 +262,7 @@ void perf_evlist__to_front(struct perf_evlist *evlist,
#define evlist__for_each_safe(evlist, tmp, evsel) \
__evlist__for_each_safe(&(evlist)->entries, tmp, evsel)

void perf_evlist__set_tracking_event(struct perf_evlist *evlist,
struct perf_evsel *tracking_evsel);

#endif /* __PERF_EVLIST_H */
3 changes: 2 additions & 1 deletion tools/perf/util/evsel.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ void perf_evsel__init(struct perf_evsel *evsel,
struct perf_event_attr *attr, int idx)
{
evsel->idx = idx;
evsel->tracking = !idx;
evsel->attr = *attr;
evsel->leader = evsel;
evsel->unit = "";
Expand Down Expand Up @@ -561,7 +562,7 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts)
{
struct perf_evsel *leader = evsel->leader;
struct perf_event_attr *attr = &evsel->attr;
int track = !evsel->idx; /* only the first counter needs these */
int track = evsel->tracking;
bool per_cpu = opts->target.default_per_cpu && !opts->target.per_thread;

attr->sample_id_all = perf_missing_features.sample_id_all ? 0 : 1;
Expand Down
1 change: 1 addition & 0 deletions tools/perf/util/evsel.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ struct perf_evsel {
bool no_aux_samples;
bool immediate;
bool system_wide;
bool tracking;
/* parse modifier helper */
int exclude_GH;
int nr_members;
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/util/record.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void perf_evlist__config(struct perf_evlist *evlist, struct record_opts *opts)

evlist__for_each(evlist, evsel) {
perf_evsel__config(evsel, opts);
if (!evsel->idx && use_comm_exec)
if (evsel->tracking && use_comm_exec)
evsel->attr.comm_exec = 1;
}

Expand Down

0 comments on commit 60b0896

Please sign in to comment.