diff options
| author | Ingo Molnar <mingo@kernel.org> | 2016-12-02 10:08:03 +0100 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2016-12-02 10:08:03 +0100 | 
| commit | e7af7b15121ca08c31a0ab9df71a41b4c53365b4 (patch) | |
| tree | 3c4ee7bd52c8cc41642efee0b5549b573d69268a /tools/perf/builtin-trace.c | |
| parent | 3782746a08f6b0a8e385058b6748a5a0f166f3a7 (diff) | |
| parent | 0fcb1da4aba6e6c7b32de5e0948b740b31ad822d (diff) | |
Merge tag 'perf-core-for-mingo-20161201' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:
New features:
 - Support AArch64 in the 'annotate' code, native/local and
   cross-arch/remote (Kim Phillips)
 - Allow considering just events in a given time interval, via the
   '--time start.s.ms,end.s.ms' command line, added to 'perf kmem',
   'perf report', 'perf sched timehist' and 'perf script' (David Ahern)
 - Add option to stop printing a callchain at one of a given group of
   symbol names (David Ahern)
 - Handle CPU migration events in 'perf sched timehist' (David Ahern)
 - Track memory freed in 'perf kmem stat' (David Ahern)
Infrastructure:
 - Add initial support (and perf test entry) for tooling hooks, starting with
   'record_start' and 'record_end', that will have as its initial user the
   eBPF infrastructure, where perf_ prefixed functions will be JITed and
   run when such hooks are called (Wang Nan)
 - Remove redundant "test" and similar strings from 'perf test' descriptions
   (Arnaldo Carvalho de Melo)
 - Implement assorted libbpf improvements (Wang Nan)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/builtin-trace.c')
| -rw-r--r-- | tools/perf/builtin-trace.c | 49 | 
1 files 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 @@ out_put:  	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);  | 
