diff options
Diffstat (limited to 'tools/perf/util/evlist.c')
-rw-r--r-- | tools/perf/util/evlist.c | 27 |
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 | |||
1814 | struct 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 | } | ||