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/[email protected]
> Signed-off-by: Jiri Olsa <[email protected]>
> ---
>  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

Reply via email to