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 <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/n/tip-4zq1udecxa51gsapyfwej5fj@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d2396999c9
commit
30269dc1a1
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user