File libperf-include-perf_evsel-in-evsel-object.patch of Package perf
xxxxxxxxxx
1
From: Jiri Olsa <jolsa@kernel.org>
2
Date: Sun, 21 Jul 2019 13:24:22 +0200
3
Subject: libperf: Include perf_evsel in evsel object
4
Git-commit: b27c4ece725a7f2225f76ad05dc6f3f5463fe893
5
Patch-mainline: v5.4-rc1
6
References: jsc#SLE-13661
7
8
Including perf_evsel in evsel object, will continue to move other
9
generic things into libperf's perf_evsel struct.
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-36-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-sched.c | 2 +-
23
tools/perf/builtin-trace.c | 2 +-
24
tools/perf/ui/browsers/hists.c | 8 ++++----
25
tools/perf/util/evlist.c | 16 ++++++++--------
26
tools/perf/util/evlist.h | 12 ++++++------
27
tools/perf/util/evsel.c | 4 ++--
28
tools/perf/util/evsel.h | 16 ++++++++--------
29
tools/perf/util/parse-events.c | 20 ++++++++++----------
30
tools/perf/util/stat-display.c | 4 ++--
31
tools/perf/util/trace-event-info.c | 4 ++--
32
10 files changed, 44 insertions(+), 44 deletions(-)
33
34
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
35
index c02ecb295f23..70247f1b23da 100644
36
--- a/tools/perf/builtin-sched.c
37
+++ b/tools/perf/builtin-sched.c
38
39
struct evsel *evsel;
40
struct evsel_runtime *er;
41
42
- list_for_each_entry(evsel, &evlist->entries, node) {
43
+ list_for_each_entry(evsel, &evlist->entries, core.node) {
44
er = perf_evsel__get_runtime(evsel);
45
if (er == NULL) {
46
pr_err("Failed to allocate memory for evsel runtime data\n");
47
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
48
index 51d142594a12..29dbf99f6081 100644
49
--- a/tools/perf/builtin-trace.c
50
+++ b/tools/perf/builtin-trace.c
51
52
continue;
53
}
54
55
- list_del_init(&evsel->node);
56
+ list_del_init(&evsel->core.node);
57
evsel->evlist = NULL;
58
evsel__delete(evsel);
59
}
60
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
61
index b83258bece05..280347499c50 100644
62
--- a/tools/perf/ui/browsers/hists.c
63
+++ b/tools/perf/ui/browsers/hists.c
64
65
{
66
struct evsel_menu *menu = container_of(browser,
67
struct evsel_menu, b);
68
- struct evsel *evsel = list_entry(entry, struct evsel, node);
69
+ struct evsel *evsel = list_entry(entry, struct evsel, core.node);
70
struct hists *hists = evsel__hists(evsel);
71
bool current_entry = ui_browser__is_current_entry(browser, row);
72
unsigned long nr_events = hists->stats.nr_events[PERF_RECORD_SAMPLE];
73
74
ui_browser__show_title(&menu->b, title);
75
switch (key) {
76
case K_TAB:
77
- if (pos->node.next == &evlist->entries)
78
+ if (pos->core.node.next == &evlist->entries)
79
pos = perf_evlist__first(evlist);
80
else
81
pos = perf_evsel__next(pos);
82
goto browse_hists;
83
case K_UNTAB:
84
- if (pos->node.prev == &evlist->entries)
85
+ if (pos->core.node.prev == &evlist->entries)
86
pos = perf_evlist__last(evlist);
87
else
88
pos = perf_evsel__prev(pos);
89
90
static bool filter_group_entries(struct ui_browser *browser __maybe_unused,
91
void *entry)
92
{
93
- struct evsel *evsel = list_entry(entry, struct evsel, node);
94
+ struct evsel *evsel = list_entry(entry, struct evsel, core.node);
95
96
if (symbol_conf.event_group && !perf_evsel__is_group_leader(evsel))
97
return true;
98
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
99
index 38a3c6d16b4b..227576bf16c0 100644
100
--- a/tools/perf/util/evlist.c
101
+++ b/tools/perf/util/evlist.c
102
103
struct evsel *pos, *n;
104
105
evlist__for_each_entry_safe(evlist, n, pos) {
106
- list_del_init(&pos->node);
107
+ list_del_init(&pos->core.node);
108
pos->evlist = NULL;
109
evsel__delete(pos);
110
}
111
112
void evlist__add(struct evlist *evlist, struct evsel *entry)
113
{
114
entry->evlist = evlist;
115
- list_add_tail(&entry->node, &evlist->entries);
116
+ list_add_tail(&entry->core.node, &evlist->entries);
117
entry->idx = evlist->nr_entries;
118
entry->tracking = !entry->idx;
119
120
121
void evlist__remove(struct evlist *evlist, struct evsel *evsel)
122
{
123
evsel->evlist = NULL;
124
- list_del_init(&evsel->node);
125
+ list_del_init(&evsel->core.node);
126
evlist->nr_entries -= 1;
127
}
128
129
130
struct evsel *evsel, *temp;
131
132
__evlist__for_each_entry_safe(list, temp, evsel) {
133
- list_del_init(&evsel->node);
134
+ list_del_init(&evsel->core.node);
135
evlist__add(evlist, evsel);
136
}
137
}
138
139
{
140
struct evsel *evsel, *leader;
141
142
- leader = list_entry(list->next, struct evsel, node);
143
- evsel = list_entry(list->prev, struct evsel, node);
144
+ leader = list_entry(list->next, struct evsel, core.node);
145
+ evsel = list_entry(list->prev, struct evsel, core.node);
146
147
leader->nr_members = evsel->idx - leader->idx + 1;
148
149
150
evsel = perf_evsel__new_idx(attrs + i, evlist->nr_entries + i);
151
if (evsel == NULL)
152
goto out_delete_partial_list;
153
- list_add_tail(&evsel->node, &head);
154
+ list_add_tail(&evsel->core.node, &head);
155
}
156
157
perf_evlist__splice_list_tail(evlist, &head);
158
159
160
evlist__for_each_entry_safe(evlist, n, evsel) {
161
if (evsel->leader == move_evsel->leader)
162
- list_move_tail(&evsel->node, &move);
163
+ list_move_tail(&evsel->core.node, &move);
164
}
165
166
list_splice(&move, &evlist->entries);
167
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
168
index 99621c056d09..1315e64ad69e 100644
169
--- a/tools/perf/util/evlist.h
170
+++ b/tools/perf/util/evlist.h
171
172
173
static inline struct evsel *perf_evlist__first(struct evlist *evlist)
174
{
175
- return list_entry(evlist->entries.next, struct evsel, node);
176
+ return list_entry(evlist->entries.next, struct evsel, core.node);
177
}
178
179
static inline struct evsel *perf_evlist__last(struct evlist *evlist)
180
{
181
- return list_entry(evlist->entries.prev, struct evsel, node);
182
+ return list_entry(evlist->entries.prev, struct evsel, core.node);
183
}
184
185
size_t perf_evlist__fprintf(struct evlist *evlist, FILE *fp);
186
187
* @evsel: struct evsel iterator
188
*/
189
#define __evlist__for_each_entry(list, evsel) \
190
- list_for_each_entry(evsel, list, node)
191
+ list_for_each_entry(evsel, list, core.node)
192
193
/**
194
* evlist__for_each_entry - iterate thru all the evsels
195
196
* @evsel: struct evsel iterator
197
*/
198
#define __evlist__for_each_entry_continue(list, evsel) \
199
- list_for_each_entry_continue(evsel, list, node)
200
+ list_for_each_entry_continue(evsel, list, core.node)
201
202
/**
203
* evlist__for_each_entry_continue - continue iteration thru all the evsels
204
205
* @evsel: struct evsel iterator
206
*/
207
#define __evlist__for_each_entry_reverse(list, evsel) \
208
- list_for_each_entry_reverse(evsel, list, node)
209
+ list_for_each_entry_reverse(evsel, list, core.node)
210
211
/**
212
* evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order
213
214
* @evsel: struct evsel iterator
215
*/
216
#define __evlist__for_each_entry_safe(list, tmp, evsel) \
217
- list_for_each_entry_safe(evsel, tmp, list, node)
218
+ list_for_each_entry_safe(evsel, tmp, list, core.node)
219
220
/**
221
* evlist__for_each_entry_safe - safely iterate thru all the evsels
222
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
223
index 652e53279b28..8fed22d889a4 100644
224
--- a/tools/perf/util/evsel.c
225
+++ b/tools/perf/util/evsel.c
226
227
evsel->evlist = NULL;
228
evsel->bpf_obj = NULL;
229
evsel->bpf_fd = -1;
230
- INIT_LIST_HEAD(&evsel->node);
231
+ INIT_LIST_HEAD(&evsel->core.node);
232
INIT_LIST_HEAD(&evsel->config_terms);
233
perf_evsel__object.init(evsel);
234
evsel->sample_size = __perf_evsel__sample_size(attr->sample_type);
235
236
237
void perf_evsel__exit(struct evsel *evsel)
238
{
239
- assert(list_empty(&evsel->node));
240
+ assert(list_empty(&evsel->core.node));
241
assert(evsel->evlist == NULL);
242
perf_evsel__free_counts(evsel);
243
perf_evsel__free_fd(evsel);
244
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
245
index 5fec1ca64f58..d74cac6fe306 100644
246
--- a/tools/perf/util/evsel.h
247
+++ b/tools/perf/util/evsel.h
248
249
#include <stddef.h>
250
#include <linux/perf_event.h>
251
#include <linux/types.h>
252
+#include <internal/evsel.h>
253
#include "xyarray.h"
254
#include "symbol_conf.h"
255
#include "cpumap.h"
256
257
/** struct evsel - event selector
258
*
259
* @evlist - evlist this evsel is in, if it is in one.
260
- * @node - To insert it into evlist->entries or in other list_heads, say in
261
- * the event parsing routines.
262
+ * @core - libperf evsel object
263
* @name - Can be set to retain the original event name passed by the user,
264
* so that when showing results in tools such as 'perf stat', we
265
* show the name used, not some alias.
266
267
* @priv: And what is in its containing unnamed union are tool specific
268
*/
269
struct evsel {
270
- struct list_head node;
271
+ struct perf_evsel core;
272
struct evlist *evlist;
273
struct perf_event_attr attr;
274
char *filter;
275
276
277
static inline struct evsel *perf_evsel__next(struct evsel *evsel)
278
{
279
- return list_entry(evsel->node.next, struct evsel, node);
280
+ return list_entry(evsel->core.node.next, struct evsel, core.node);
281
}
282
283
static inline struct evsel *perf_evsel__prev(struct evsel *evsel)
284
{
285
- return list_entry(evsel->node.prev, struct evsel, node);
286
+ return list_entry(evsel->core.node.prev, struct evsel, core.node);
287
}
288
289
/**
290
291
292
/* Iterates group WITHOUT the leader. */
293
#define for_each_group_member(_evsel, _leader) \
294
-for ((_evsel) = list_entry((_leader)->node.next, struct evsel, node); \
295
+for ((_evsel) = list_entry((_leader)->core.node.next, struct evsel, core.node); \
296
(_evsel) && (_evsel)->leader == (_leader); \
297
- (_evsel) = list_entry((_evsel)->node.next, struct evsel, node))
298
+ (_evsel) = list_entry((_evsel)->core.node.next, struct evsel, core.node))
299
300
/* Iterates group WITH the leader. */
301
#define for_each_group_evsel(_evsel, _leader) \
302
for ((_evsel) = _leader; \
303
(_evsel) && (_evsel)->leader == (_leader); \
304
- (_evsel) = list_entry((_evsel)->node.next, struct evsel, node))
305
+ (_evsel) = list_entry((_evsel)->core.node.next, struct evsel, core.node))
306
307
static inline bool perf_evsel__has_branch_callstack(const struct evsel *evsel)
308
{
309
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
310
index 38eeca6fa1fc..e111c0e0a5ac 100644
311
--- a/tools/perf/util/parse-events.c
312
+++ b/tools/perf/util/parse-events.c
313
314
if (config_terms)
315
list_splice(config_terms, &evsel->config_terms);
316
317
- list_add_tail(&evsel->node, list);
318
+ list_add_tail(&evsel->core.node, list);
319
return evsel;
320
}
321
322
323
list_splice(&config_terms, &evsel->config_terms);
324
}
325
326
- list_add_tail(&evsel->node, list);
327
+ list_add_tail(&evsel->core.node, list);
328
return 0;
329
}
330
331
332
333
pr_debug("Failed to add BPF event %s:%s\n",
334
group, event);
335
- list_for_each_entry_safe(evsel, tmp, &new_evsels, node) {
336
- list_del_init(&evsel->node);
337
+ list_for_each_entry_safe(evsel, tmp, &new_evsels, core.node) {
338
+ list_del_init(&evsel->core.node);
339
evsel__delete(evsel);
340
}
341
return err;
342
}
343
pr_debug("adding %s:%s\n", group, event);
344
345
- list_for_each_entry(pos, &new_evsels, node) {
346
+ list_for_each_entry(pos, &new_evsels, core.node) {
347
pr_debug("adding %s:%s to %p\n",
348
group, event, pos);
349
pos->bpf_fd = fd;
350
351
bool is_leader = true;
352
int i, nr_pmu = 0, total_members, ret = 0;
353
354
- leader = list_first_entry(list, struct evsel, node);
355
- evsel = list_last_entry(list, struct evsel, node);
356
+ leader = list_first_entry(list, struct evsel, core.node);
357
+ evsel = list_last_entry(list, struct evsel, core.node);
358
total_members = evsel->idx - leader->idx + 1;
359
360
leaders = calloc(total_members, sizeof(uintptr_t));
361
362
return;
363
364
__perf_evlist__set_leader(list);
365
- leader = list_entry(list->next, struct evsel, node);
366
+ leader = list_entry(list->next, struct evsel, core.node);
367
leader->group_name = name ? strdup(name) : NULL;
368
}
369
370
371
if (!last)
372
return 0;
373
374
- if (last->node.prev == &evlist->entries)
375
+ if (last->core.node.prev == &evlist->entries)
376
return 0;
377
- last = list_entry(last->node.prev, struct evsel, node);
378
+ last = list_entry(last->core.node.prev, struct evsel, core.node);
379
} while (!last->cmdline_group_boundary);
380
381
return 0;
382
diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
383
index 1f099823a1f9..17b7d3b55b5f 100644
384
--- a/tools/perf/util/stat-display.c
385
+++ b/tools/perf/util/stat-display.c
386
387
struct evlist *evlist = counter->evlist;
388
struct evsel *alias;
389
390
- alias = list_prepare_entry(counter, &(evlist->entries), node);
391
- list_for_each_entry_continue (alias, &evlist->entries, node) {
392
+ alias = list_prepare_entry(counter, &(evlist->entries), core.node);
393
+ list_for_each_entry_continue (alias, &evlist->entries, core.node) {
394
if (strcmp(perf_evsel__name(alias), perf_evsel__name(counter)) ||
395
alias->scale != counter->scale ||
396
alias->cgrp != counter->cgrp ||
397
diff --git a/tools/perf/util/trace-event-info.c b/tools/perf/util/trace-event-info.c
398
index d7ae0627ac47..7efdbb182ea1 100644
399
--- a/tools/perf/util/trace-event-info.c
400
+++ b/tools/perf/util/trace-event-info.c
401
402
struct evsel *pos;
403
int nr_tracepoints = 0;
404
405
- list_for_each_entry(pos, pattrs, node) {
406
+ list_for_each_entry(pos, pattrs, core.node) {
407
if (pos->attr.type != PERF_TYPE_TRACEPOINT)
408
continue;
409
++nr_tracepoints;
410
411
{
412
struct evsel *pos;
413
414
- list_for_each_entry(pos, pattrs, node)
415
+ list_for_each_entry(pos, pattrs, core.node)
416
if (pos->attr.type == PERF_TYPE_TRACEPOINT)
417
return true;
418
419
420