perf evsel: Allow asking for max precise_ip in new_cycles()
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 30269dc1a17df5117a2e267835863d4466c3569d Gitweb: http://git.kernel.org/tip/30269dc1a17df5117a2e267835863d4466c3569d Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Mon, 3 Jul 2017 13:05:43 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 18 Jul 2017 23:14:12 -0300
perf evsel: Allow asking for max precise_ip in new_cycles()
There are cases where we want to leave attr.precise_ip as zero, such as when using 'perf record --no-samples', where this would make the kernel return -EINVAL.
Cc Adrian Hunter <[email protected]>
Cc David Ahern <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/evlist.c | 2 +- tools/perf/util/evsel.c | 7 +++++-- tools/perf/util/evsel.h | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-)
tools/perf/util/evlist.c +1 -1
@@ -244,7 +244,7 @@ void perf_event_attr__set_max_precise_ip(struct perf_event_attr *attr)int perf_evlist__add_default (struct perf_evlist *evlist) { -struct perf_evsel *evsel =perf_evsel__new_cycles (); +struct perf_evsel *evsel =perf_evsel__new_cycles (true);if (evsel ==NULL )return -ENOMEM ;
tools/perf/util/evsel.c +5 -2
@@ -268,7 +268,7 @@ struct perf_evsel *perf_evsel__new_idx(struct perf_event_attr *attr, int idx)return evsel; } -struct perf_evsel *perf_evsel__new_cycles (void ) +struct perf_evsel *perf_evsel__new_cycles (bool precise) {struct perf_event_attr attr = { .type =PERF_TYPE_HARDWARE ,
@@ -278,6 +278,9 @@ struct perf_evsel *perf_evsel__new_cycles(void)struct perf_evsel *evsel;event_attr_init (&attr); + +if (!precise) + goto new_event;/* * Unnamed union member, not supported as struct member named * initializer in older compilers such as gcc 4.4.7
@@ -292,7 +295,7 @@ struct perf_evsel *perf_evsel__new_cycles(void)* to kick in when we return and before perf_evsel__open() is called. */ attr.sample_period =0 ; - +new_event: evsel =perf_evsel__new (&attr);if (evsel ==NULL ) goto out;
tools/perf/util/evsel.h +1 -1
@@ -185,7 +185,7 @@ static inline struct perf_evsel *perf_evsel__newtp(const char *sys, const char *return perf_evsel__newtp_idx (sys, name,0 ); } -struct perf_evsel *perf_evsel__new_cycles (void ); +struct perf_evsel *perf_evsel__new_cycles (bool precise);struct event_format *event_format__new (const char *sys,const char *name);