aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2015-09-08 03:58:53 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-09-15 09:23:17 -0400
commitf114d6eff76d20b521d8716e969e71b1f56f82b5 (patch)
tree45ee406e9681804526f6b8291d19c3f9de3423c3 /tools
parentec9a77a7e3346a05b1287597982d0dd09dd1c3bd (diff)
perf evlist: Fix splice_list_tail() not setting evlist
Commit d49e46950772 ("perf evsel: Add a backpointer to the evlist a evsel is in") updated perf_evlist__add() but not perf_evlist__splice_list_tail(). This illustrates that it is better if perf_evlist__splice_list_tail() calls perf_evlist__add() instead of duplicating the logic, so do that. This will also simplify a subsequent fix for propagating maps. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@intel.com> Link: http://lkml.kernel.org/r/1441699142-18905-6-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/evlist.c15
-rw-r--r--tools/perf/util/evlist.h3
-rw-r--r--tools/perf/util/parse-events.c3
3 files changed, 9 insertions, 12 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 3a4445f26a2c..961560b2046b 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -136,15 +136,14 @@ void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
136} 136}
137 137
138void perf_evlist__splice_list_tail(struct perf_evlist *evlist, 138void perf_evlist__splice_list_tail(struct perf_evlist *evlist,
139 struct list_head *list, 139 struct list_head *list)
140 int nr_entries)
141{ 140{
142 bool set_id_pos = !evlist->nr_entries; 141 struct perf_evsel *evsel, *temp;
143 142
144 list_splice_tail(list, &evlist->entries); 143 __evlist__for_each_safe(list, temp, evsel) {
145 evlist->nr_entries += nr_entries; 144 list_del_init(&evsel->node);
146 if (set_id_pos) 145 perf_evlist__add(evlist, evsel);
147 perf_evlist__set_id_pos(evlist); 146 }
148} 147}
149 148
150void __perf_evlist__set_leader(struct list_head *list) 149void __perf_evlist__set_leader(struct list_head *list)
@@ -210,7 +209,7 @@ static int perf_evlist__add_attrs(struct perf_evlist *evlist,
210 list_add_tail(&evsel->node, &head); 209 list_add_tail(&evsel->node, &head);
211 } 210 }
212 211
213 perf_evlist__splice_list_tail(evlist, &head, nr_attrs); 212 perf_evlist__splice_list_tail(evlist, &head);
214 213
215 return 0; 214 return 0;
216 215
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index cfc4df68a9db..115d8b53c601 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -179,8 +179,7 @@ bool perf_evlist__valid_sample_id_all(struct perf_evlist *evlist);
179bool perf_evlist__valid_read_format(struct perf_evlist *evlist); 179bool perf_evlist__valid_read_format(struct perf_evlist *evlist);
180 180
181void perf_evlist__splice_list_tail(struct perf_evlist *evlist, 181void perf_evlist__splice_list_tail(struct perf_evlist *evlist,
182 struct list_head *list, 182 struct list_head *list);
183 int nr_entries);
184 183
185static inline struct perf_evsel *perf_evlist__first(struct perf_evlist *evlist) 184static inline struct perf_evsel *perf_evlist__first(struct perf_evlist *evlist)
186{ 185{
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index d826e6f515db..7e8ae21906e2 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1140,10 +1140,9 @@ int parse_events(struct perf_evlist *evlist, const char *str,
1140 ret = parse_events__scanner(str, &data, PE_START_EVENTS); 1140 ret = parse_events__scanner(str, &data, PE_START_EVENTS);
1141 perf_pmu__parse_cleanup(); 1141 perf_pmu__parse_cleanup();
1142 if (!ret) { 1142 if (!ret) {
1143 int entries = data.idx - evlist->nr_entries;
1144 struct perf_evsel *last; 1143 struct perf_evsel *last;
1145 1144
1146 perf_evlist__splice_list_tail(evlist, &data.list, entries); 1145 perf_evlist__splice_list_tail(evlist, &data.list);
1147 evlist->nr_groups += data.nr_groups; 1146 evlist->nr_groups += data.nr_groups;
1148 last = perf_evlist__last(evlist); 1147 last = perf_evlist__last(evlist);
1149 last->cmdline_group_boundary = true; 1148 last->cmdline_group_boundary = true;