aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2015-03-24 18:23:47 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-03-26 09:52:28 -0400
commit23d4aad48e31d3269af484dd2f9bd251278cd667 (patch)
tree0bf256b09c904a39ed08aacf6e8f08068c3c6863 /tools
parente94eedab3ab8201fd41480171b2fabbf3c5b1ae0 (diff)
perf evlist: Return the first evsel with an invalid filter in apply_filters()
Use of a bad filter currently generates the message: Error: failed to set filter with 22 (Invalid argument) Add the event name to make it clear to which event the filter failed to apply: Error: Failed to set filter "foo" on event sched:sg_lb_stats: 22: Invalid argument To test it use something like: # perf record -e sched:sched_switch -e sched:*fork --filter parent_pid==1 -e sched:*wait* --filter bla usleep 1 Error: failed to set filter "bla" on event sched:sched_stat_iowait with 22 (Invalid argument) # Based-on-a-patch-by: David Ahern <dsahern@gmail.com> Acked-by: David Ahern <dsahern@gmail.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: Don Zickus <dzickus@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-d7gq2fjvaecozp9o2i0siifu@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/builtin-record.c5
-rw-r--r--tools/perf/builtin-stat.c5
-rw-r--r--tools/perf/util/evlist.c6
-rw-r--r--tools/perf/util/evlist.h2
4 files changed, 11 insertions, 7 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 5a2ff510b75b..18aad239b401 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -161,8 +161,9 @@ try_again:
161 } 161 }
162 } 162 }
163 163
164 if (perf_evlist__apply_filters(evlist)) { 164 if (perf_evlist__apply_filters(evlist, &pos)) {
165 error("failed to set filter with %d (%s)\n", errno, 165 error("failed to set filter \"%s\" on event %s with %d (%s)\n",
166 pos->filter, perf_evsel__name(pos), errno,
166 strerror_r(errno, msg, sizeof(msg))); 167 strerror_r(errno, msg, sizeof(msg)));
167 rc = -1; 168 rc = -1;
168 goto out; 169 goto out;
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index d4d1b77da0bd..f7b8218785f6 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -684,8 +684,9 @@ static int __run_perf_stat(int argc, const char **argv)
684 unit_width = l; 684 unit_width = l;
685 } 685 }
686 686
687 if (perf_evlist__apply_filters(evsel_list)) { 687 if (perf_evlist__apply_filters(evsel_list, &counter)) {
688 error("failed to set filter with %d (%s)\n", errno, 688 error("failed to set filter \"%s\" on event %s with %d (%s)\n",
689 counter->filter, perf_evsel__name(counter), errno,
689 strerror_r(errno, msg, sizeof(msg))); 690 strerror_r(errno, msg, sizeof(msg)));
690 return -1; 691 return -1;
691 } 692 }
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 8d0b62361129..82bf224bbee9 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1050,7 +1050,7 @@ out_delete_threads:
1050 return -1; 1050 return -1;
1051} 1051}
1052 1052
1053int perf_evlist__apply_filters(struct perf_evlist *evlist) 1053int perf_evlist__apply_filters(struct perf_evlist *evlist, struct perf_evsel **err_evsel)
1054{ 1054{
1055 struct perf_evsel *evsel; 1055 struct perf_evsel *evsel;
1056 int err = 0; 1056 int err = 0;
@@ -1062,8 +1062,10 @@ int perf_evlist__apply_filters(struct perf_evlist *evlist)
1062 continue; 1062 continue;
1063 1063
1064 err = perf_evsel__set_filter(evsel, ncpus, nthreads, evsel->filter); 1064 err = perf_evsel__set_filter(evsel, ncpus, nthreads, evsel->filter);
1065 if (err) 1065 if (err) {
1066 *err_evsel = evsel;
1066 break; 1067 break;
1068 }
1067 } 1069 }
1068 1070
1069 return err; 1071 return err;
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index f07c984465f0..fb19c47b8aac 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -152,7 +152,7 @@ static inline void perf_evlist__set_maps(struct perf_evlist *evlist,
152} 152}
153 153
154int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target); 154int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target);
155int perf_evlist__apply_filters(struct perf_evlist *evlist); 155int perf_evlist__apply_filters(struct perf_evlist *evlist, struct perf_evsel **err_evsel);
156 156
157void __perf_evlist__set_leader(struct list_head *list); 157void __perf_evlist__set_leader(struct list_head *list);
158void perf_evlist__set_leader(struct perf_evlist *evlist); 158void perf_evlist__set_leader(struct perf_evlist *evlist);