aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/evlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/evlist.c')
-rw-r--r--tools/perf/util/evlist.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index e88e6f9b1463..668d2a9ef0f4 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)
1810 leader->forced_leader = true; 1810 leader->forced_leader = true;
1811 } 1811 }
1812} 1812}
1813
1814struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evsel_list,
1815 struct perf_evsel *evsel)
1816{
1817 struct perf_evsel *c2, *leader;
1818 bool is_open = true;
1819
1820 leader = evsel->leader;
1821 pr_debug("Weak group for %s/%d failed\n",
1822 leader->name, leader->nr_members);
1823
1824 /*
1825 * for_each_group_member doesn't work here because it doesn't
1826 * include the first entry.
1827 */
1828 evlist__for_each_entry(evsel_list, c2) {
1829 if (c2 == evsel)
1830 is_open = false;
1831 if (c2->leader == leader) {
1832 if (is_open)
1833 perf_evsel__close(c2);
1834 c2->leader = c2;
1835 c2->nr_members = 0;
1836 }
1837 }
1838 return leader;
1839}