File perf-evsel-allow-asking-for-max-precise_ip-in-new_cycles.patch of Package perf
85
1
From: Arnaldo Carvalho de Melo <acme@redhat.com>
2
Date: Mon, 3 Jul 2017 13:05:43 -0300
3
Subject: perf evsel: Allow asking for max precise_ip in new_cycles()
4
Git-commit: 30269dc1a17df5117a2e267835863d4466c3569d
5
Patch-mainline: v4.14-rc1
6
References: bsc#1083691
7
8
There are cases where we want to leave attr.precise_ip as zero, such
9
as when using 'perf record --no-samples', where this would make the
10
kernel return -EINVAL.
11
12
Cc: Adrian Hunter <adrian.hunter@intel.com>
13
Cc: David Ahern <dsahern@gmail.com>
14
Cc: Jiri Olsa <jolsa@kernel.org>
15
Cc: Namhyung Kim <namhyung@kernel.org>
16
Cc: Wang Nan <wangnan0@huawei.com>
17
Link: http://lkml.kernel.org/n/tip-4zq1udecxa51gsapyfwej5fj@git.kernel.org
18
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
19
Signed-off-by: Tony Jones <tonyj@suse.de>
20
---
21
tools/perf/util/evlist.c | 2 +-
22
tools/perf/util/evsel.c | 7 +++++--
23
tools/perf/util/evsel.h | 2 +-
24
3 files changed, 7 insertions(+), 4 deletions(-)
25
26
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
27
index 46c0faf6c502..f51c3314015c 100644
28
--- a/tools/perf/util/evlist.c
29
+++ b/tools/perf/util/evlist.c
30
31
32
int perf_evlist__add_default(struct perf_evlist *evlist)
33
{
34
- struct perf_evsel *evsel = perf_evsel__new_cycles();
35
+ struct perf_evsel *evsel = perf_evsel__new_cycles(true);
36
37
if (evsel == NULL)
38
return -ENOMEM;
39
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
40
index 0e4cd6092564..df567e478a0e 100644
41
--- a/tools/perf/util/evsel.c
42
+++ b/tools/perf/util/evsel.c
43
44
return evsel;
45
}
46
47
-struct perf_evsel *perf_evsel__new_cycles(void)
48
+struct perf_evsel *perf_evsel__new_cycles(bool precise)
49
{
50
struct perf_event_attr attr = {
51
.type = PERF_TYPE_HARDWARE,
52
53
struct perf_evsel *evsel;
54
55
event_attr_init(&attr);
56
+
57
+ if (!precise)
58
+ goto new_event;
59
/*
60
* Unnamed union member, not supported as struct member named
61
* initializer in older compilers such as gcc 4.4.7
62
63
* to kick in when we return and before perf_evsel__open() is called.
64
*/
65
attr.sample_period = 0;
66
-
67
+new_event:
68
evsel = perf_evsel__new(&attr);
69
if (evsel == NULL)
70
goto out;
71
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
72
index 219ad0cdb9f4..fb40ca3c6519 100644
73
--- a/tools/perf/util/evsel.h
74
+++ b/tools/perf/util/evsel.h
75
76
return perf_evsel__newtp_idx(sys, name, 0);
77
}
78
79
-struct perf_evsel *perf_evsel__new_cycles(void);
80
+struct perf_evsel *perf_evsel__new_cycles(bool precise);
81
82
struct event_format *event_format__new(const char *sys, const char *name);
83
84
85