forked from luck/tmp_suning_uos_patched
libperf: Adopt simplified perf_evlist__open()/close() functions from tools/perf
Add the following functions: perf_evlist__open() perf_evlist__close() It's a simplified version of perf's evlist__open() without the sampling id index calculations. We can try to merge it in the future when we need it in some new libperf user. Also adopt some helper evlist traversing macros. In the future we can remove them from util/evlist.h, but that requires also some other changes. 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-69-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
0ff1a0fdf5
commit
80dc2b3e25
|
@ -1,5 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <perf/evlist.h>
|
||||
#include <perf/evsel.h>
|
||||
#include <linux/list.h>
|
||||
#include <internal/evlist.h>
|
||||
#include <internal/evsel.h>
|
||||
|
@ -114,3 +115,29 @@ void perf_evlist__set_maps(struct perf_evlist *evlist,
|
|||
|
||||
perf_evlist__propagate_maps(evlist);
|
||||
}
|
||||
|
||||
int perf_evlist__open(struct perf_evlist *evlist)
|
||||
{
|
||||
struct perf_evsel *evsel;
|
||||
int err;
|
||||
|
||||
perf_evlist__for_each_entry(evlist, evsel) {
|
||||
err = perf_evsel__open(evsel, evsel->cpus, evsel->threads);
|
||||
if (err < 0)
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_err:
|
||||
perf_evlist__close(evlist);
|
||||
return err;
|
||||
}
|
||||
|
||||
void perf_evlist__close(struct perf_evlist *evlist)
|
||||
{
|
||||
struct perf_evsel *evsel;
|
||||
|
||||
perf_evlist__for_each_entry_reverse(evlist, evsel)
|
||||
perf_evsel__close(evsel);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
#ifndef __LIBPERF_INTERNAL_EVLIST_H
|
||||
#define __LIBPERF_INTERNAL_EVLIST_H
|
||||
|
||||
#include <linux/list.h>
|
||||
|
||||
struct perf_cpu_map;
|
||||
struct perf_thread_map;
|
||||
|
||||
|
@ -13,4 +15,36 @@ struct perf_evlist {
|
|||
struct perf_thread_map *threads;
|
||||
};
|
||||
|
||||
/**
|
||||
* __perf_evlist__for_each_entry - iterate thru all the evsels
|
||||
* @list: list_head instance to iterate
|
||||
* @evsel: struct perf_evsel iterator
|
||||
*/
|
||||
#define __perf_evlist__for_each_entry(list, evsel) \
|
||||
list_for_each_entry(evsel, list, node)
|
||||
|
||||
/**
|
||||
* evlist__for_each_entry - iterate thru all the evsels
|
||||
* @evlist: perf_evlist instance to iterate
|
||||
* @evsel: struct perf_evsel iterator
|
||||
*/
|
||||
#define perf_evlist__for_each_entry(evlist, evsel) \
|
||||
__perf_evlist__for_each_entry(&(evlist)->entries, evsel)
|
||||
|
||||
/**
|
||||
* __perf_evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order
|
||||
* @list: list_head instance to iterate
|
||||
* @evsel: struct evsel iterator
|
||||
*/
|
||||
#define __perf_evlist__for_each_entry_reverse(list, evsel) \
|
||||
list_for_each_entry_reverse(evsel, list, node)
|
||||
|
||||
/**
|
||||
* perf_evlist__for_each_entry_reverse - iterate thru all the evsels in reverse order
|
||||
* @evlist: evlist instance to iterate
|
||||
* @evsel: struct evsel iterator
|
||||
*/
|
||||
#define perf_evlist__for_each_entry_reverse(evlist, evsel) \
|
||||
__perf_evlist__for_each_entry_reverse(&(evlist)->entries, evsel)
|
||||
|
||||
#endif /* __LIBPERF_INTERNAL_EVLIST_H */
|
||||
|
|
|
@ -18,6 +18,8 @@ LIBPERF_API struct perf_evlist *perf_evlist__new(void);
|
|||
LIBPERF_API void perf_evlist__delete(struct perf_evlist *evlist);
|
||||
LIBPERF_API struct perf_evsel* perf_evlist__next(struct perf_evlist *evlist,
|
||||
struct perf_evsel *evsel);
|
||||
LIBPERF_API int perf_evlist__open(struct perf_evlist *evlist);
|
||||
LIBPERF_API void perf_evlist__close(struct perf_evlist *evlist);
|
||||
|
||||
#define perf_evlist__for_each_evsel(evlist, pos) \
|
||||
for ((pos) = perf_evlist__next((evlist), NULL); \
|
||||
|
|
|
@ -25,6 +25,8 @@ LIBPERF_0.0.1 {
|
|||
perf_evsel__threads;
|
||||
perf_evlist__new;
|
||||
perf_evlist__delete;
|
||||
perf_evlist__open;
|
||||
perf_evlist__close;
|
||||
perf_evlist__init;
|
||||
perf_evlist__add;
|
||||
perf_evlist__remove;
|
||||
|
|
Loading…
Reference in New Issue
Block a user