Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62605dc5 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

perf record: Synthesize non-exec MMAP records when --data used



When perf_event_attr.mmap_data is set the kernel will generate
PERF_RECORD_MMAP events when non-exec (data, SysV mem) mmaps are
created, so we need to synthesize from /proc/pid/maps for existing
threads, as we do for exec mmaps.

Right now just 'perf record' does it, but any other tool that uses
perf_event__synthesize_thread(s|map) can request it.

Reported-by: default avatarDon Zickus <dzickus@redhat.com>
Tested-by: default avatarDon Zickus <dzickus@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Bill Gray <bgray@redhat.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Joe Mario <jmario@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Richard Fowles <rfowles@redhat.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-ihwzraikx23ian9txinogvv2@git.kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent ef503831
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1550,10 +1550,10 @@ static int kvm_events_live(struct perf_kvm_stat *kvm,
		perf_event__synthesize_thread_map(&kvm->tool,
						  kvm->evlist->threads,
						  perf_event__process,
						  &kvm->session->machines.host);
						  &kvm->session->machines.host, false);
	else
		perf_event__synthesize_threads(&kvm->tool, perf_event__process,
					       &kvm->session->machines.host);
					       &kvm->session->machines.host, false);


	err = kvm_live_open_events(kvm);
+3 −3
Original line number Diff line number Diff line
@@ -483,10 +483,10 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
	if (perf_target__has_task(&opts->target))
		err = perf_event__synthesize_thread_map(tool, evsel_list->threads,
							process_synthesized_event,
						  machine);
							machine, opts->sample_address);
	else if (perf_target__has_cpu(&opts->target))
		err = perf_event__synthesize_threads(tool, process_synthesized_event,
					       machine);
						     machine, opts->sample_address);
	else /* command specified */
		err = 0;

+2 −2
Original line number Diff line number Diff line
@@ -953,10 +953,10 @@ static int __cmd_top(struct perf_top *top)
	if (perf_target__has_task(&opts->target))
		perf_event__synthesize_thread_map(&top->tool, top->evlist->threads,
						  perf_event__process,
						  &top->session->machines.host);
						  &top->session->machines.host, false);
	else
		perf_event__synthesize_threads(&top->tool, perf_event__process,
					       &top->session->machines.host);
					       &top->session->machines.host, false);

	ret = perf_top__start_counters(top);
	if (ret)
+2 −2
Original line number Diff line number Diff line
@@ -1343,10 +1343,10 @@ static int trace__symbols_init(struct trace *trace, struct perf_evlist *evlist)
	if (perf_target__has_task(&trace->opts.target)) {
		err = perf_event__synthesize_thread_map(&trace->tool, evlist->threads,
							trace__tool_process,
							trace->host);
							trace->host, false);
	} else {
		err = perf_event__synthesize_threads(&trace->tool, trace__tool_process,
						     trace->host);
						     trace->host, false);
	}

	if (err)
+1 −1
Original line number Diff line number Diff line
@@ -441,7 +441,7 @@ static int do_test_code_reading(bool try_kcore)
	}

	ret = perf_event__synthesize_thread_map(NULL, threads,
						perf_event__process, machine);
						perf_event__process, machine, false);
	if (ret < 0) {
		pr_debug("perf_event__synthesize_thread_map failed\n");
		goto out_err;
Loading