From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755854AbcKYTGg (ORCPT ); Fri, 25 Nov 2016 14:06:36 -0500 Received: from mx1.redhat.com ([209.132.183.28]:44102 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753474AbcKYTGZ (ORCPT ); Fri, 25 Nov 2016 14:06:25 -0500 Date: Fri, 25 Nov 2016 17:06:15 -0200 From: Arnaldo Carvalho de Melo To: David Ahern Cc: linux-kernel@vger.kernel.org, David Ahern Subject: Re: [PATCH] perf trace: Update tid/pid filtering option to leverage symbol_conf Message-ID: <20161125190614.GD2267@redhat.com> References: <1480091392-35645-1-git-send-email-dsa@cumulusnetworks.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1480091392-35645-1-git-send-email-dsa@cumulusnetworks.com> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.20 (2009-12-10) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Fri, 25 Nov 2016 19:06:25 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Fri, Nov 25, 2016 at 09:29:52AM -0700, David Ahern escreveu: > From: David Ahern > > Leverage pid/tid filtering done by symbol_conf hooks. Thanks, tested and applied. - Arnaldo > Signed-off-by: David Ahern > --- > tools/perf/builtin-trace.c | 49 +++++++++------------------------------------- > 1 file changed, 9 insertions(+), 40 deletions(-) > > diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c > index 5f45166c892d..206bf72b77fc 100644 > --- a/tools/perf/builtin-trace.c > +++ b/tools/perf/builtin-trace.c > @@ -74,8 +74,6 @@ struct trace { > size_t nr; > int *entries; > } ev_qualifier_ids; > - struct intlist *tid_list; > - struct intlist *pid_list; > struct { > size_t nr; > pid_t *entries; > @@ -1890,18 +1888,6 @@ static int trace__pgfault(struct trace *trace, > return err; > } > > -static bool skip_sample(struct trace *trace, struct perf_sample *sample) > -{ > - if ((trace->pid_list && intlist__find(trace->pid_list, sample->pid)) || > - (trace->tid_list && intlist__find(trace->tid_list, sample->tid))) > - return false; > - > - if (trace->pid_list || trace->tid_list) > - return true; > - > - return false; > -} > - > static void trace__set_base_time(struct trace *trace, > struct perf_evsel *evsel, > struct perf_sample *sample) > @@ -1926,11 +1912,13 @@ static int trace__process_sample(struct perf_tool *tool, > struct machine *machine __maybe_unused) > { > struct trace *trace = container_of(tool, struct trace, tool); > + struct thread *thread; > int err = 0; > > tracepoint_handler handler = evsel->handler; > > - if (skip_sample(trace, sample)) > + thread = machine__findnew_thread(trace->host, sample->pid, sample->tid); > + if (thread && thread__is_filtered(thread)) > return 0; > > trace__set_base_time(trace, evsel, sample); > @@ -1943,27 +1931,6 @@ static int trace__process_sample(struct perf_tool *tool, > return err; > } > > -static int parse_target_str(struct trace *trace) > -{ > - if (trace->opts.target.pid) { > - trace->pid_list = intlist__new(trace->opts.target.pid); > - if (trace->pid_list == NULL) { > - pr_err("Error parsing process id string\n"); > - return -EINVAL; > - } > - } > - > - if (trace->opts.target.tid) { > - trace->tid_list = intlist__new(trace->opts.target.tid); > - if (trace->tid_list == NULL) { > - pr_err("Error parsing thread id string\n"); > - return -EINVAL; > - } > - } > - > - return 0; > -} > - > static int trace__record(struct trace *trace, int argc, const char **argv) > { > unsigned int rec_argc, i, j; > @@ -2460,6 +2427,12 @@ static int trace__replay(struct trace *trace) > if (session == NULL) > return -1; > > + if (trace->opts.target.pid) > + symbol_conf.pid_list_str = strdup(trace->opts.target.pid); > + > + if (trace->opts.target.tid) > + symbol_conf.tid_list_str = strdup(trace->opts.target.tid); > + > if (symbol__init(&session->header.env) < 0) > goto out; > > @@ -2503,10 +2476,6 @@ static int trace__replay(struct trace *trace) > evsel->handler = trace__pgfault; > } > > - err = parse_target_str(trace); > - if (err != 0) > - goto out; > - > setup_pager(); > > err = perf_session__process_events(session); > -- > 2.7.4 (Apple Git-66)