File libperf-include-perf_evlist-in-evlist-object.patch of Package perf
293
1
From: Jiri Olsa <jolsa@kernel.org>
2
Date: Sun, 21 Jul 2019 13:24:23 +0200
3
Subject: libperf: Include perf_evlist in evlist object
4
Git-commit: ce9036a6e3bdfac6c7ccf8221aec9bcf9c2d355e
5
Patch-mainline: v5.4-rc1
6
References: jsc#SLE-13661
7
8
Include perf_evlist in the evlist object, will continue to move other
9
generic things into libperf's perf_evlist.
10
11
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
12
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
13
Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
14
Cc: Andi Kleen <ak@linux.intel.com>
15
Cc: Michael Petlan <mpetlan@redhat.com>
16
Cc: Namhyung Kim <namhyung@kernel.org>
17
Cc: Peter Zijlstra <peterz@infradead.org>
18
Link: http://lkml.kernel.org/r/20190721112506.12306-37-jolsa@kernel.org
19
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
20
Signed-off-by: Tony Jones <tonyj@suse.de>
21
---
22
tools/perf/builtin-record.c | 4 ++--
23
tools/perf/builtin-sched.c | 2 +-
24
tools/perf/builtin-trace.c | 2 +-
25
tools/perf/ui/browsers/hists.c | 6 +++---
26
tools/perf/util/cgroup.c | 2 +-
27
tools/perf/util/evlist.c | 8 ++++----
28
tools/perf/util/evlist.h | 17 +++++++++--------
29
tools/perf/util/header.c | 4 ++--
30
tools/perf/util/parse-events.c | 2 +-
31
tools/perf/util/stat-display.c | 4 ++--
32
10 files changed, 26 insertions(+), 25 deletions(-)
33
34
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
35
index 03fbe4600ca0..17bb0a536da3 100644
36
--- a/tools/perf/builtin-record.c
37
+++ b/tools/perf/builtin-record.c
38
39
if (rec->no_buildid)
40
perf_header__clear_feat(&session->header, HEADER_BUILD_ID);
41
42
- if (!have_tracepoints(&rec->evlist->entries))
43
+ if (!have_tracepoints(&rec->evlist->core.entries))
44
perf_header__clear_feat(&session->header, HEADER_TRACING_DATA);
45
46
if (!rec->opts.branch_stack)
47
48
return err;
49
}
50
51
- if (have_tracepoints(&rec->evlist->entries)) {
52
+ if (have_tracepoints(&rec->evlist->core.entries)) {
53
/*
54
* FIXME err <= 0 here actually means that
55
* there were no tracepoints so its not really
56
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
57
index 70247f1b23da..897d11c8ca2e 100644
58
--- a/tools/perf/builtin-sched.c
59
+++ b/tools/perf/builtin-sched.c
60
61
struct evsel *evsel;
62
struct evsel_runtime *er;
63
64
- list_for_each_entry(evsel, &evlist->entries, core.node) {
65
+ list_for_each_entry(evsel, &evlist->core.entries, core.node) {
66
er = perf_evsel__get_runtime(evsel);
67
if (er == NULL) {
68
pr_err("Failed to allocate memory for evsel runtime data\n");
69
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
70
index 29dbf99f6081..bcd033e91de4 100644
71
--- a/tools/perf/builtin-trace.c
72
+++ b/tools/perf/builtin-trace.c
73
74
{
75
struct trace *trace = opt->value;
76
77
- if (!list_empty(&trace->evlist->entries))
78
+ if (!list_empty(&trace->evlist->core.entries))
79
return parse_cgroups(opt, str, unset);
80
81
trace->cgroup = evlist__findnew_cgroup(trace->evlist, str);
82
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
83
index 280347499c50..ed5406ff9fe4 100644
84
--- a/tools/perf/ui/browsers/hists.c
85
+++ b/tools/perf/ui/browsers/hists.c
86
87
ui_browser__show_title(&menu->b, title);
88
switch (key) {
89
case K_TAB:
90
- if (pos->core.node.next == &evlist->entries)
91
+ if (pos->core.node.next == &evlist->core.entries)
92
pos = perf_evlist__first(evlist);
93
else
94
pos = perf_evsel__next(pos);
95
goto browse_hists;
96
case K_UNTAB:
97
- if (pos->core.node.prev == &evlist->entries)
98
+ if (pos->core.node.prev == &evlist->core.entries)
99
pos = perf_evlist__last(evlist);
100
else
101
pos = perf_evsel__prev(pos);
102
103
struct evsel *pos;
104
struct evsel_menu menu = {
105
.b = {
106
- .entries = &evlist->entries,
107
+ .entries = &evlist->core.entries,
108
.refresh = ui_browser__list_head_refresh,
109
.seek = ui_browser__list_head_seek,
110
.write = perf_evsel_menu__write,
111
diff --git a/tools/perf/util/cgroup.c b/tools/perf/util/cgroup.c
112
index deb87ecd3671..f73599f271ff 100644
113
--- a/tools/perf/util/cgroup.c
114
+++ b/tools/perf/util/cgroup.c
115
116
char *s;
117
int ret, i;
118
119
- if (list_empty(&evlist->entries)) {
120
+ if (list_empty(&evlist->core.entries)) {
121
fprintf(stderr, "must define events before cgroups\n");
122
return -1;
123
}
124
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
125
index 227576bf16c0..faf3ffd81d4c 100644
126
--- a/tools/perf/util/evlist.c
127
+++ b/tools/perf/util/evlist.c
128
129
130
for (i = 0; i < PERF_EVLIST__HLIST_SIZE; ++i)
131
INIT_HLIST_HEAD(&evlist->heads[i]);
132
- INIT_LIST_HEAD(&evlist->entries);
133
+ INIT_LIST_HEAD(&evlist->core.entries);
134
perf_evlist__set_maps(evlist, cpus, threads);
135
fdarray__init(&evlist->pollfd, 64);
136
evlist->workload.pid = -1;
137
138
void evlist__add(struct evlist *evlist, struct evsel *entry)
139
{
140
entry->evlist = evlist;
141
- list_add_tail(&entry->core.node, &evlist->entries);
142
+ list_add_tail(&entry->core.node, &evlist->core.entries);
143
entry->idx = evlist->nr_entries;
144
entry->tracking = !entry->idx;
145
146
147
{
148
if (evlist->nr_entries) {
149
evlist->nr_groups = evlist->nr_entries > 1 ? 1 : 0;
150
- __perf_evlist__set_leader(&evlist->entries);
151
+ __perf_evlist__set_leader(&evlist->core.entries);
152
}
153
}
154
155
156
list_move_tail(&evsel->core.node, &move);
157
}
158
159
- list_splice(&move, &evlist->entries);
160
+ list_splice(&move, &evlist->core.entries);
161
}
162
163
void perf_evlist__set_tracking_event(struct evlist *evlist,
164
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
165
index 1315e64ad69e..7117378a08e3 100644
166
--- a/tools/perf/util/evlist.h
167
+++ b/tools/perf/util/evlist.h
168
169
#include <linux/list.h>
170
#include <api/fd/array.h>
171
#include <stdio.h>
172
+#include <internal/evlist.h>
173
#include "../perf.h"
174
#include "event.h"
175
#include "evsel.h"
176
177
#define PERF_EVLIST__HLIST_SIZE (1 << PERF_EVLIST__HLIST_BITS)
178
179
struct evlist {
180
- struct list_head entries;
181
+ struct perf_evlist core;
182
struct hlist_head heads[PERF_EVLIST__HLIST_SIZE];
183
int nr_entries;
184
int nr_groups;
185
186
187
static inline bool perf_evlist__empty(struct evlist *evlist)
188
{
189
- return list_empty(&evlist->entries);
190
+ return list_empty(&evlist->core.entries);
191
}
192
193
static inline struct evsel *perf_evlist__first(struct evlist *evlist)
194
{
195
- return list_entry(evlist->entries.next, struct evsel, core.node);
196
+ return list_entry(evlist->core.entries.next, struct evsel, core.node);
197
}
198
199
static inline struct evsel *perf_evlist__last(struct evlist *evlist)
200
{
201
- return list_entry(evlist->entries.prev, struct evsel, core.node);
202
+ return list_entry(evlist->core.entries.prev, struct evsel, core.node);
203
}
204
205
size_t perf_evlist__fprintf(struct evlist *evlist, FILE *fp);
206
207
* @evsel: struct evsel iterator
208
*/
209
#define evlist__for_each_entry(evlist, evsel) \
210
- __evlist__for_each_entry(&(evlist)->entries, evsel)
211
+ __evlist__for_each_entry(&(evlist)->core.entries, evsel)
212
213
/**
214
* __evlist__for_each_entry_continue - continue iteration thru all the evsels
215
216
* @evsel: struct evsel iterator
217
*/
218
#define evlist__for_each_entry_continue(evlist, evsel) \
219
- __evlist__for_each_entry_continue(&(evlist)->entries, evsel)
220
+ __evlist__for_each_entry_continue(&(evlist)->core.entries, evsel)
221
222
/**
223
* __evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order
224
225
* @evsel: struct evsel iterator
226
*/
227
#define evlist__for_each_entry_reverse(evlist, evsel) \
228
- __evlist__for_each_entry_reverse(&(evlist)->entries, evsel)
229
+ __evlist__for_each_entry_reverse(&(evlist)->core.entries, evsel)
230
231
/**
232
* __evlist__for_each_entry_safe - safely iterate thru all the evsels
233
234
* @tmp: struct evsel temp iterator
235
*/
236
#define evlist__for_each_entry_safe(evlist, tmp, evsel) \
237
- __evlist__for_each_entry_safe(&(evlist)->entries, tmp, evsel)
238
+ __evlist__for_each_entry_safe(&(evlist)->core.entries, tmp, evsel)
239
240
void perf_evlist__set_tracking_event(struct evlist *evlist,
241
struct evsel *tracking_evsel);
242
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
243
index 5e0093251f26..70ab6b8c715b 100644
244
--- a/tools/perf/util/header.c
245
+++ b/tools/perf/util/header.c
246
247
if (WARN(ff->buf, "Error: calling %s in pipe-mode.\n", __func__))
248
return -1;
249
250
- return read_tracing_data(ff->fd, &evlist->entries);
251
+ return read_tracing_data(ff->fd, &evlist->core.entries);
252
}
253
254
static int write_build_id(struct feat_fd *ff,
255
256
* - write the tracing data from the temp file
257
* to the pipe
258
*/
259
- tdata = tracing_data_get(&evlist->entries, fd, true);
260
+ tdata = tracing_data_get(&evlist->core.entries, fd, true);
261
if (!tdata)
262
return -1;
263
264
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
265
index e111c0e0a5ac..a0b7d68d2f8e 100644
266
--- a/tools/perf/util/parse-events.c
267
+++ b/tools/perf/util/parse-events.c
268
269
if (!last)
270
return 0;
271
272
- if (last->core.node.prev == &evlist->entries)
273
+ if (last->core.node.prev == &evlist->core.entries)
274
return 0;
275
last = list_entry(last->core.node.prev, struct evsel, core.node);
276
} while (!last->cmdline_group_boundary);
277
diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
278
index 17b7d3b55b5f..b1a2571f7c8f 100644
279
--- a/tools/perf/util/stat-display.c
280
+++ b/tools/perf/util/stat-display.c
281
282
struct evlist *evlist = counter->evlist;
283
struct evsel *alias;
284
285
- alias = list_prepare_entry(counter, &(evlist->entries), core.node);
286
- list_for_each_entry_continue (alias, &evlist->entries, core.node) {
287
+ alias = list_prepare_entry(counter, &(evlist->core.entries), core.node);
288
+ list_for_each_entry_continue (alias, &evlist->core.entries, core.node) {
289
if (strcmp(perf_evsel__name(alias), perf_evsel__name(counter)) ||
290
alias->scale != counter->scale ||
291
alias->cgrp != counter->cgrp ||
292
293