| From | Arnaldo Carvalho de Melo <> | Date | Wed, 24 Jul 2019 12:42:02 -0300 | Subject | Re: [PATCH 47/79] libperf: Add perf_evlist__for_each_evsel macro |
| |
Em Sun, Jul 21, 2019 at 01:24:34PM +0200, Jiri Olsa escreveu: > Adding perf_evlist__for_each_evsel macro to iterate > perf_evsel objects in evlist. > > Adding perf_evlist__next function to do that.
Replaced the above line in the cset commit log with:
Introduce the perf_evlist__next() function to do that without exposing 'struct perf_evlist' internals.
> Link: http://lkml.kernel.org/n/tip-usi0zxyxmai1ld94nrbum43i@git.kernel.org > Signed-off-by: Jiri Olsa <jolsa@kernel.org> > --- > tools/perf/lib/evlist.c | 20 ++++++++++++++++++++ > tools/perf/lib/include/perf/evlist.h | 7 +++++++ > tools/perf/lib/libperf.map | 1 + > 3 files changed, 28 insertions(+) > > diff --git a/tools/perf/lib/evlist.c b/tools/perf/lib/evlist.c > index 0517deb4cb1c..8c26ebf290f0 100644 > --- a/tools/perf/lib/evlist.c > +++ b/tools/perf/lib/evlist.c > @@ -34,3 +34,23 @@ struct perf_evlist *perf_evlist__new(void) > > return evlist; > } > + > +struct perf_evsel* > +perf_evlist__next(struct perf_evlist *evlist, struct perf_evsel *prev) > +{ > + struct perf_evsel *next; > + > + if (!prev) { > + next = list_first_entry(&evlist->entries, > + struct perf_evsel, > + node); > + } else { > + next = list_next_entry(prev, node); > + } > + > + /* Empty list is noticed here so don't need checking on entry. */ > + if (&next->node == &evlist->entries) > + return NULL; > + > + return next; > +} > diff --git a/tools/perf/lib/include/perf/evlist.h b/tools/perf/lib/include/perf/evlist.h > index 7255a60869a1..5092b622935b 100644 > --- a/tools/perf/lib/include/perf/evlist.h > +++ b/tools/perf/lib/include/perf/evlist.h > @@ -13,5 +13,12 @@ LIBPERF_API void perf_evlist__add(struct perf_evlist *evlist, > LIBPERF_API void perf_evlist__remove(struct perf_evlist *evlist, > struct perf_evsel *evsel); > LIBPERF_API struct perf_evlist *perf_evlist__new(void); > +LIBPERF_API struct perf_evsel* perf_evlist__next(struct perf_evlist *evlist, > + struct perf_evsel *evsel); > + > +#define perf_evlist__for_each_evsel(evlist, pos) \ > + for ((pos) = perf_evlist__next((evlist), NULL); \ > + (pos) != NULL; \ > + (pos) = perf_evlist__next((evlist), (pos))) > > #endif /* __LIBPERF_EVLIST_H */ > diff --git a/tools/perf/lib/libperf.map b/tools/perf/lib/libperf.map > index e3eac9b60726..c0968226f7b6 100644 > --- a/tools/perf/lib/libperf.map > +++ b/tools/perf/lib/libperf.map > @@ -17,6 +17,7 @@ LIBPERF_0.0.1 { > perf_evlist__init; > perf_evlist__add; > perf_evlist__remove; > + perf_evlist__next; > local: > *; > }; > -- > 2.21.0
--
- Arnaldo
|