Re: [PATCH v1 1/2] perf, tools: Move perf_evsel__reset_weak_group into evlist
On Mon, Oct 01, 2018 at 12:59:26PM -0700, Andi Kleen wrote: > From: Andi Kleen > > - Move the function from builtin-stat to evlist for reuse > - Rename to evlist to match purpose better > - Pass the evlist as first argument. > - No functional changes > > Signed-off-by: Andi Kleen Acked-by: Jiri Olsa thanks, jirka > --- > tools/perf/builtin-stat.c | 29 ++--- > tools/perf/util/evlist.c | 27 +++ > tools/perf/util/evlist.h | 3 +++ > 3 files changed, 32 insertions(+), 27 deletions(-) > > diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c > index 08a1e64078ca..e60f6991dbb8 100644 > --- a/tools/perf/builtin-stat.c > +++ b/tools/perf/builtin-stat.c > @@ -567,32 +567,6 @@ static bool perf_evsel__should_store_id(struct > perf_evsel *counter) > return STAT_RECORD || counter->attr.read_format & PERF_FORMAT_ID; > } > > -static struct perf_evsel *perf_evsel__reset_weak_group(struct perf_evsel > *evsel) > -{ > - struct perf_evsel *c2, *leader; > - bool is_open = true; > - > - leader = evsel->leader; > - pr_debug("Weak group for %s/%d failed\n", > - leader->name, leader->nr_members); > - > - /* > - * for_each_group_member doesn't work here because it doesn't > - * include the first entry. > - */ > - evlist__for_each_entry(evsel_list, c2) { > - if (c2 == evsel) > - is_open = false; > - if (c2->leader == leader) { > - if (is_open) > - perf_evsel__close(c2); > - c2->leader = c2; > - c2->nr_members = 0; > - } > - } > - return leader; > -} > - > static int __run_perf_stat(int argc, const char **argv, int run_idx) > { > int interval = stat_config.interval; > @@ -639,7 +613,8 @@ static int __run_perf_stat(int argc, const char **argv, > int run_idx) > if ((errno == EINVAL || errno == EBADF) && > counter->leader != counter && > counter->weak_group) { > - counter = perf_evsel__reset_weak_group(counter); > + counter = > perf_evlist__reset_weak_group(evsel_list, > + > counter); > goto try_again; > } > > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c > index e7a4b31a84fb..de90f9097e97 100644 > --- a/tools/perf/util/evlist.c > +++ b/tools/perf/util/evlist.c > @@ -1810,3 +1810,30 @@ void perf_evlist__force_leader(struct perf_evlist > *evlist) > leader->forced_leader = true; > } > } > + > +struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist > *evsel_list, > + struct perf_evsel *evsel) > +{ > + struct perf_evsel *c2, *leader; > + bool is_open = true; > + > + leader = evsel->leader; > + pr_debug("Weak group for %s/%d failed\n", > + leader->name, leader->nr_members); > + > + /* > + * for_each_group_member doesn't work here because it doesn't > + * include the first entry. > + */ > + evlist__for_each_entry(evsel_list, c2) { > + if (c2 == evsel) > + is_open = false; > + if (c2->leader == leader) { > + if (is_open) > + perf_evsel__close(c2); > + c2->leader = c2; > + c2->nr_members = 0; > + } > + } > + return leader; > +} > diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h > index dc66436add98..9919eed6d15b 100644 > --- a/tools/perf/util/evlist.h > +++ b/tools/perf/util/evlist.h > @@ -312,4 +312,7 @@ bool perf_evlist__exclude_kernel(struct perf_evlist > *evlist); > > void perf_evlist__force_leader(struct perf_evlist *evlist); > > +struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evlist, > + struct perf_evsel *evsel); > + > #endif /* __PERF_EVLIST_H */ > -- > 2.17.1 >
Re: [PATCH v1 1/2] perf, tools: Move perf_evsel__reset_weak_group into evlist
On Mon, Oct 01, 2018 at 12:59:26PM -0700, Andi Kleen wrote: > From: Andi Kleen > > - Move the function from builtin-stat to evlist for reuse > - Rename to evlist to match purpose better > - Pass the evlist as first argument. > - No functional changes > > Signed-off-by: Andi Kleen Acked-by: Jiri Olsa thanks, jirka > --- > tools/perf/builtin-stat.c | 29 ++--- > tools/perf/util/evlist.c | 27 +++ > tools/perf/util/evlist.h | 3 +++ > 3 files changed, 32 insertions(+), 27 deletions(-) > > diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c > index 08a1e64078ca..e60f6991dbb8 100644 > --- a/tools/perf/builtin-stat.c > +++ b/tools/perf/builtin-stat.c > @@ -567,32 +567,6 @@ static bool perf_evsel__should_store_id(struct > perf_evsel *counter) > return STAT_RECORD || counter->attr.read_format & PERF_FORMAT_ID; > } > > -static struct perf_evsel *perf_evsel__reset_weak_group(struct perf_evsel > *evsel) > -{ > - struct perf_evsel *c2, *leader; > - bool is_open = true; > - > - leader = evsel->leader; > - pr_debug("Weak group for %s/%d failed\n", > - leader->name, leader->nr_members); > - > - /* > - * for_each_group_member doesn't work here because it doesn't > - * include the first entry. > - */ > - evlist__for_each_entry(evsel_list, c2) { > - if (c2 == evsel) > - is_open = false; > - if (c2->leader == leader) { > - if (is_open) > - perf_evsel__close(c2); > - c2->leader = c2; > - c2->nr_members = 0; > - } > - } > - return leader; > -} > - > static int __run_perf_stat(int argc, const char **argv, int run_idx) > { > int interval = stat_config.interval; > @@ -639,7 +613,8 @@ static int __run_perf_stat(int argc, const char **argv, > int run_idx) > if ((errno == EINVAL || errno == EBADF) && > counter->leader != counter && > counter->weak_group) { > - counter = perf_evsel__reset_weak_group(counter); > + counter = > perf_evlist__reset_weak_group(evsel_list, > + > counter); > goto try_again; > } > > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c > index e7a4b31a84fb..de90f9097e97 100644 > --- a/tools/perf/util/evlist.c > +++ b/tools/perf/util/evlist.c > @@ -1810,3 +1810,30 @@ void perf_evlist__force_leader(struct perf_evlist > *evlist) > leader->forced_leader = true; > } > } > + > +struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist > *evsel_list, > + struct perf_evsel *evsel) > +{ > + struct perf_evsel *c2, *leader; > + bool is_open = true; > + > + leader = evsel->leader; > + pr_debug("Weak group for %s/%d failed\n", > + leader->name, leader->nr_members); > + > + /* > + * for_each_group_member doesn't work here because it doesn't > + * include the first entry. > + */ > + evlist__for_each_entry(evsel_list, c2) { > + if (c2 == evsel) > + is_open = false; > + if (c2->leader == leader) { > + if (is_open) > + perf_evsel__close(c2); > + c2->leader = c2; > + c2->nr_members = 0; > + } > + } > + return leader; > +} > diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h > index dc66436add98..9919eed6d15b 100644 > --- a/tools/perf/util/evlist.h > +++ b/tools/perf/util/evlist.h > @@ -312,4 +312,7 @@ bool perf_evlist__exclude_kernel(struct perf_evlist > *evlist); > > void perf_evlist__force_leader(struct perf_evlist *evlist); > > +struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evlist, > + struct perf_evsel *evsel); > + > #endif /* __PERF_EVLIST_H */ > -- > 2.17.1 >
[PATCH v1 1/2] perf, tools: Move perf_evsel__reset_weak_group into evlist
From: Andi Kleen - Move the function from builtin-stat to evlist for reuse - Rename to evlist to match purpose better - Pass the evlist as first argument. - No functional changes Signed-off-by: Andi Kleen --- tools/perf/builtin-stat.c | 29 ++--- tools/perf/util/evlist.c | 27 +++ tools/perf/util/evlist.h | 3 +++ 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 08a1e64078ca..e60f6991dbb8 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -567,32 +567,6 @@ static bool perf_evsel__should_store_id(struct perf_evsel *counter) return STAT_RECORD || counter->attr.read_format & PERF_FORMAT_ID; } -static struct perf_evsel *perf_evsel__reset_weak_group(struct perf_evsel *evsel) -{ - struct perf_evsel *c2, *leader; - bool is_open = true; - - leader = evsel->leader; - pr_debug("Weak group for %s/%d failed\n", - leader->name, leader->nr_members); - - /* -* for_each_group_member doesn't work here because it doesn't -* include the first entry. -*/ - evlist__for_each_entry(evsel_list, c2) { - if (c2 == evsel) - is_open = false; - if (c2->leader == leader) { - if (is_open) - perf_evsel__close(c2); - c2->leader = c2; - c2->nr_members = 0; - } - } - return leader; -} - static int __run_perf_stat(int argc, const char **argv, int run_idx) { int interval = stat_config.interval; @@ -639,7 +613,8 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx) if ((errno == EINVAL || errno == EBADF) && counter->leader != counter && counter->weak_group) { - counter = perf_evsel__reset_weak_group(counter); + counter = perf_evlist__reset_weak_group(evsel_list, + counter); goto try_again; } diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index e7a4b31a84fb..de90f9097e97 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1810,3 +1810,30 @@ void perf_evlist__force_leader(struct perf_evlist *evlist) leader->forced_leader = true; } } + +struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evsel_list, +struct perf_evsel *evsel) +{ + struct perf_evsel *c2, *leader; + bool is_open = true; + + leader = evsel->leader; + pr_debug("Weak group for %s/%d failed\n", + leader->name, leader->nr_members); + + /* +* for_each_group_member doesn't work here because it doesn't +* include the first entry. +*/ + evlist__for_each_entry(evsel_list, c2) { + if (c2 == evsel) + is_open = false; + if (c2->leader == leader) { + if (is_open) + perf_evsel__close(c2); + c2->leader = c2; + c2->nr_members = 0; + } + } + return leader; +} diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index dc66436add98..9919eed6d15b 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -312,4 +312,7 @@ bool perf_evlist__exclude_kernel(struct perf_evlist *evlist); void perf_evlist__force_leader(struct perf_evlist *evlist); +struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evlist, +struct perf_evsel *evsel); + #endif /* __PERF_EVLIST_H */ -- 2.17.1
[PATCH v1 1/2] perf, tools: Move perf_evsel__reset_weak_group into evlist
From: Andi Kleen - Move the function from builtin-stat to evlist for reuse - Rename to evlist to match purpose better - Pass the evlist as first argument. - No functional changes Signed-off-by: Andi Kleen --- tools/perf/builtin-stat.c | 29 ++--- tools/perf/util/evlist.c | 27 +++ tools/perf/util/evlist.h | 3 +++ 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 08a1e64078ca..e60f6991dbb8 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -567,32 +567,6 @@ static bool perf_evsel__should_store_id(struct perf_evsel *counter) return STAT_RECORD || counter->attr.read_format & PERF_FORMAT_ID; } -static struct perf_evsel *perf_evsel__reset_weak_group(struct perf_evsel *evsel) -{ - struct perf_evsel *c2, *leader; - bool is_open = true; - - leader = evsel->leader; - pr_debug("Weak group for %s/%d failed\n", - leader->name, leader->nr_members); - - /* -* for_each_group_member doesn't work here because it doesn't -* include the first entry. -*/ - evlist__for_each_entry(evsel_list, c2) { - if (c2 == evsel) - is_open = false; - if (c2->leader == leader) { - if (is_open) - perf_evsel__close(c2); - c2->leader = c2; - c2->nr_members = 0; - } - } - return leader; -} - static int __run_perf_stat(int argc, const char **argv, int run_idx) { int interval = stat_config.interval; @@ -639,7 +613,8 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx) if ((errno == EINVAL || errno == EBADF) && counter->leader != counter && counter->weak_group) { - counter = perf_evsel__reset_weak_group(counter); + counter = perf_evlist__reset_weak_group(evsel_list, + counter); goto try_again; } diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index e7a4b31a84fb..de90f9097e97 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1810,3 +1810,30 @@ void perf_evlist__force_leader(struct perf_evlist *evlist) leader->forced_leader = true; } } + +struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evsel_list, +struct perf_evsel *evsel) +{ + struct perf_evsel *c2, *leader; + bool is_open = true; + + leader = evsel->leader; + pr_debug("Weak group for %s/%d failed\n", + leader->name, leader->nr_members); + + /* +* for_each_group_member doesn't work here because it doesn't +* include the first entry. +*/ + evlist__for_each_entry(evsel_list, c2) { + if (c2 == evsel) + is_open = false; + if (c2->leader == leader) { + if (is_open) + perf_evsel__close(c2); + c2->leader = c2; + c2->nr_members = 0; + } + } + return leader; +} diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index dc66436add98..9919eed6d15b 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -312,4 +312,7 @@ bool perf_evlist__exclude_kernel(struct perf_evlist *evlist); void perf_evlist__force_leader(struct perf_evlist *evlist); +struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evlist, +struct perf_evsel *evsel); + #endif /* __PERF_EVLIST_H */ -- 2.17.1