libperf: Include perf_evlist in evlist object
Include perf_evlist in the evlist object, will continue to move other generic things into libperf's perf_evlist. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Alexey Budankov <alexey.budankov@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Michael Petlan <mpetlan@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20190721112506.12306-37-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:

committed by
Arnaldo Carvalho de Melo

parent
b27c4ece72
commit
ce9036a6e3
@@ -208,7 +208,7 @@ int parse_cgroups(const struct option *opt, const char *str,
|
||||
char *s;
|
||||
int ret, i;
|
||||
|
||||
if (list_empty(&evlist->entries)) {
|
||||
if (list_empty(&evlist->core.entries)) {
|
||||
fprintf(stderr, "must define events before cgroups\n");
|
||||
return -1;
|
||||
}
|
||||
|
@@ -48,7 +48,7 @@ void evlist__init(struct evlist *evlist, struct perf_cpu_map *cpus,
|
||||
|
||||
for (i = 0; i < PERF_EVLIST__HLIST_SIZE; ++i)
|
||||
INIT_HLIST_HEAD(&evlist->heads[i]);
|
||||
INIT_LIST_HEAD(&evlist->entries);
|
||||
INIT_LIST_HEAD(&evlist->core.entries);
|
||||
perf_evlist__set_maps(evlist, cpus, threads);
|
||||
fdarray__init(&evlist->pollfd, 64);
|
||||
evlist->workload.pid = -1;
|
||||
@@ -180,7 +180,7 @@ static void perf_evlist__propagate_maps(struct evlist *evlist)
|
||||
void evlist__add(struct evlist *evlist, struct evsel *entry)
|
||||
{
|
||||
entry->evlist = evlist;
|
||||
list_add_tail(&entry->core.node, &evlist->entries);
|
||||
list_add_tail(&entry->core.node, &evlist->core.entries);
|
||||
entry->idx = evlist->nr_entries;
|
||||
entry->tracking = !entry->idx;
|
||||
|
||||
@@ -226,7 +226,7 @@ void perf_evlist__set_leader(struct evlist *evlist)
|
||||
{
|
||||
if (evlist->nr_entries) {
|
||||
evlist->nr_groups = evlist->nr_entries > 1 ? 1 : 0;
|
||||
__perf_evlist__set_leader(&evlist->entries);
|
||||
__perf_evlist__set_leader(&evlist->core.entries);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1683,7 +1683,7 @@ void perf_evlist__to_front(struct evlist *evlist,
|
||||
list_move_tail(&evsel->core.node, &move);
|
||||
}
|
||||
|
||||
list_splice(&move, &evlist->entries);
|
||||
list_splice(&move, &evlist->core.entries);
|
||||
}
|
||||
|
||||
void perf_evlist__set_tracking_event(struct evlist *evlist,
|
||||
|
@@ -8,6 +8,7 @@
|
||||
#include <linux/list.h>
|
||||
#include <api/fd/array.h>
|
||||
#include <stdio.h>
|
||||
#include <internal/evlist.h>
|
||||
#include "../perf.h"
|
||||
#include "event.h"
|
||||
#include "evsel.h"
|
||||
@@ -25,7 +26,7 @@ struct record_opts;
|
||||
#define PERF_EVLIST__HLIST_SIZE (1 << PERF_EVLIST__HLIST_BITS)
|
||||
|
||||
struct evlist {
|
||||
struct list_head entries;
|
||||
struct perf_evlist core;
|
||||
struct hlist_head heads[PERF_EVLIST__HLIST_SIZE];
|
||||
int nr_entries;
|
||||
int nr_groups;
|
||||
@@ -225,17 +226,17 @@ void perf_evlist__splice_list_tail(struct evlist *evlist,
|
||||
|
||||
static inline bool perf_evlist__empty(struct evlist *evlist)
|
||||
{
|
||||
return list_empty(&evlist->entries);
|
||||
return list_empty(&evlist->core.entries);
|
||||
}
|
||||
|
||||
static inline struct evsel *perf_evlist__first(struct evlist *evlist)
|
||||
{
|
||||
return list_entry(evlist->entries.next, struct evsel, core.node);
|
||||
return list_entry(evlist->core.entries.next, struct evsel, core.node);
|
||||
}
|
||||
|
||||
static inline struct evsel *perf_evlist__last(struct evlist *evlist)
|
||||
{
|
||||
return list_entry(evlist->entries.prev, struct evsel, core.node);
|
||||
return list_entry(evlist->core.entries.prev, struct evsel, core.node);
|
||||
}
|
||||
|
||||
size_t perf_evlist__fprintf(struct evlist *evlist, FILE *fp);
|
||||
@@ -261,7 +262,7 @@ void perf_evlist__to_front(struct evlist *evlist,
|
||||
* @evsel: struct evsel iterator
|
||||
*/
|
||||
#define evlist__for_each_entry(evlist, evsel) \
|
||||
__evlist__for_each_entry(&(evlist)->entries, evsel)
|
||||
__evlist__for_each_entry(&(evlist)->core.entries, evsel)
|
||||
|
||||
/**
|
||||
* __evlist__for_each_entry_continue - continue iteration thru all the evsels
|
||||
@@ -277,7 +278,7 @@ void perf_evlist__to_front(struct evlist *evlist,
|
||||
* @evsel: struct evsel iterator
|
||||
*/
|
||||
#define evlist__for_each_entry_continue(evlist, evsel) \
|
||||
__evlist__for_each_entry_continue(&(evlist)->entries, evsel)
|
||||
__evlist__for_each_entry_continue(&(evlist)->core.entries, evsel)
|
||||
|
||||
/**
|
||||
* __evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order
|
||||
@@ -293,7 +294,7 @@ void perf_evlist__to_front(struct evlist *evlist,
|
||||
* @evsel: struct evsel iterator
|
||||
*/
|
||||
#define evlist__for_each_entry_reverse(evlist, evsel) \
|
||||
__evlist__for_each_entry_reverse(&(evlist)->entries, evsel)
|
||||
__evlist__for_each_entry_reverse(&(evlist)->core.entries, evsel)
|
||||
|
||||
/**
|
||||
* __evlist__for_each_entry_safe - safely iterate thru all the evsels
|
||||
@@ -311,7 +312,7 @@ void perf_evlist__to_front(struct evlist *evlist,
|
||||
* @tmp: struct evsel temp iterator
|
||||
*/
|
||||
#define evlist__for_each_entry_safe(evlist, tmp, evsel) \
|
||||
__evlist__for_each_entry_safe(&(evlist)->entries, tmp, evsel)
|
||||
__evlist__for_each_entry_safe(&(evlist)->core.entries, tmp, evsel)
|
||||
|
||||
void perf_evlist__set_tracking_event(struct evlist *evlist,
|
||||
struct evsel *tracking_evsel);
|
||||
|
@@ -304,7 +304,7 @@ static int write_tracing_data(struct feat_fd *ff,
|
||||
if (WARN(ff->buf, "Error: calling %s in pipe-mode.\n", __func__))
|
||||
return -1;
|
||||
|
||||
return read_tracing_data(ff->fd, &evlist->entries);
|
||||
return read_tracing_data(ff->fd, &evlist->core.entries);
|
||||
}
|
||||
|
||||
static int write_build_id(struct feat_fd *ff,
|
||||
@@ -4112,7 +4112,7 @@ int perf_event__synthesize_tracing_data(struct perf_tool *tool, int fd,
|
||||
* - write the tracing data from the temp file
|
||||
* to the pipe
|
||||
*/
|
||||
tdata = tracing_data_get(&evlist->entries, fd, true);
|
||||
tdata = tracing_data_get(&evlist->core.entries, fd, true);
|
||||
if (!tdata)
|
||||
return -1;
|
||||
|
||||
|
@@ -2050,7 +2050,7 @@ foreach_evsel_in_last_glob(struct evlist *evlist,
|
||||
if (!last)
|
||||
return 0;
|
||||
|
||||
if (last->core.node.prev == &evlist->entries)
|
||||
if (last->core.node.prev == &evlist->core.entries)
|
||||
return 0;
|
||||
last = list_entry(last->core.node.prev, struct evsel, core.node);
|
||||
} while (!last->cmdline_group_boundary);
|
||||
|
@@ -548,8 +548,8 @@ static void collect_all_aliases(struct perf_stat_config *config, struct evsel *c
|
||||
struct evlist *evlist = counter->evlist;
|
||||
struct evsel *alias;
|
||||
|
||||
alias = list_prepare_entry(counter, &(evlist->entries), core.node);
|
||||
list_for_each_entry_continue (alias, &evlist->entries, core.node) {
|
||||
alias = list_prepare_entry(counter, &(evlist->core.entries), core.node);
|
||||
list_for_each_entry_continue (alias, &evlist->core.entries, core.node) {
|
||||
if (strcmp(perf_evsel__name(alias), perf_evsel__name(counter)) ||
|
||||
alias->scale != counter->scale ||
|
||||
alias->cgrp != counter->cgrp ||
|
||||
|
Reference in New Issue
Block a user