diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index b10608680c014281bc868287cbe672e35611aa69..c02b65a72410b9d140412b40d5350f3699031b9d 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -2314,6 +2314,7 @@ static int trace__add_syscall_newtp(struct trace *trace) static int trace__run(struct trace *trace, int argc, const char **argv) { struct perf_evlist *evlist = trace->evlist; + struct perf_evsel *evsel; int err = -1, i; unsigned long before; const bool forks = argc > 0; @@ -2382,10 +2383,12 @@ static int trace__run(struct trace *trace, int argc, const char **argv) else if (thread_map__pid(evlist->threads, 0) == -1) err = perf_evlist__set_filter_pid(evlist, getpid()); - if (err < 0) { - printf("err=%d,%s\n", -err, strerror(-err)); - exit(1); - } + if (err < 0) + goto out_error_mem; + + err = perf_evlist__apply_filters(evlist, &evsel); + if (err < 0) + goto out_error_apply_filters; err = perf_evlist__mmap(evlist, trace->opts.mmap_pages, false); if (err < 0) @@ -2488,6 +2491,13 @@ static int trace__run(struct trace *trace, int argc, const char **argv) out_error: fprintf(trace->output, "%s\n", errbuf); goto out_delete_evlist; + +out_error_apply_filters: + fprintf(trace->output, + "Failed to set filter \"%s\" on event %s with %d (%s)\n", + evsel->filter, perf_evsel__name(evsel), errno, + strerror_r(errno, errbuf, sizeof(errbuf))); + goto out_delete_evlist; } out_error_mem: fprintf(trace->output, "Not enough memory to run!\n"); diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 51913284e8e337094fcaa7379d96f7bc907e59d3..f7d9c77ee31b7972069c3265ab8b2e89a143eb80 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1175,11 +1175,9 @@ int perf_evlist__set_filter(struct perf_evlist *evlist, const char *filter) { struct perf_evsel *evsel; int err = 0; - const int ncpus = cpu_map__nr(evlist->cpus), - nthreads = thread_map__nr(evlist->threads); evlist__for_each(evlist, evsel) { - err = perf_evsel__apply_filter(evsel, ncpus, nthreads, filter); + err = perf_evsel__set_filter(evsel, filter); if (err) break; }