[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190724154202.GD5727@kernel.org>
Date: Wed, 24 Jul 2019 12:42:02 -0300
From: Arnaldo Carvalho de Melo <arnaldo.melo@...il.com>
To: Jiri Olsa <jolsa@...nel.org>
Cc: lkml <linux-kernel@...r.kernel.org>,
Ingo Molnar <mingo@...nel.org>,
Namhyung Kim <namhyung@...nel.org>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Peter Zijlstra <a.p.zijlstra@...llo.nl>,
Andi Kleen <ak@...ux.intel.com>,
Alexey Budankov <alexey.budankov@...ux.intel.com>,
Michael Petlan <mpetlan@...hat.com>
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@...nel.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
Powered by blists - more mailing lists