public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: lkml <linux-kernel@vger.kernel.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Ingo Molnar <mingo@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Michael Petlan <mpetlan@redhat.com>,
	Song Liu <songliubraving@fb.com>,
	"Frank Ch. Eigler" <fche@redhat.com>,
	Ian Rogers <irogers@google.com>,
	Stephane Eranian <eranian@google.com>,
	Alexey Budankov <alexey.budankov@linux.intel.com>,
	Andi Kleen <ak@linux.intel.com>,
	Adrian Hunter <adrian.hunter@intel.com>
Subject: [PATCH 13/26] perf tools: Plug in mmap3 event
Date: Sun, 13 Sep 2020 23:03:00 +0200	[thread overview]
Message-ID: <20200913210313.1985612-14-jolsa@kernel.org> (raw)
In-Reply-To: <20200913210313.1985612-1-jolsa@kernel.org>

Add mmap3 event processing to all perf tools that process
events and let them call the perf_event__process_mmap3
function.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/builtin-annotate.c     |  1 +
 tools/perf/builtin-c2c.c          |  1 +
 tools/perf/builtin-diff.c         |  1 +
 tools/perf/builtin-inject.c       | 38 +++++++++++++++++++++++++++++++
 tools/perf/builtin-kmem.c         |  1 +
 tools/perf/builtin-mem.c          |  1 +
 tools/perf/builtin-record.c       | 14 ++++++++++++
 tools/perf/builtin-report.c       |  2 ++
 tools/perf/builtin-script.c       |  1 +
 tools/perf/builtin-trace.c        |  1 +
 tools/perf/util/build-id.c        |  1 +
 tools/perf/util/data-convert-bt.c |  1 +
 12 files changed, 63 insertions(+)

diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index 4940d10074c3..f68e86bfeb3b 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -474,6 +474,7 @@ int cmd_annotate(int argc, const char **argv)
 			.sample	= process_sample_event,
 			.mmap	= perf_event__process_mmap,
 			.mmap2	= perf_event__process_mmap2,
+			.mmap3	= perf_event__process_mmap3,
 			.comm	= perf_event__process_comm,
 			.exit	= perf_event__process_exit,
 			.fork	= perf_event__process_fork,
diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
index 5938b100eaf4..a7d1061fde98 100644
--- a/tools/perf/builtin-c2c.c
+++ b/tools/perf/builtin-c2c.c
@@ -365,6 +365,7 @@ static struct perf_c2c c2c = {
 		.sample		= process_sample_event,
 		.mmap		= perf_event__process_mmap,
 		.mmap2		= perf_event__process_mmap2,
+		.mmap3		= perf_event__process_mmap3,
 		.comm		= perf_event__process_comm,
 		.exit		= perf_event__process_exit,
 		.fork		= perf_event__process_fork,
diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c
index f8c9bdd8269a..f8c77fe8f7a4 100644
--- a/tools/perf/builtin-diff.c
+++ b/tools/perf/builtin-diff.c
@@ -450,6 +450,7 @@ static struct perf_diff pdiff = {
 		.sample	= diff__process_sample_event,
 		.mmap	= perf_event__process_mmap,
 		.mmap2	= perf_event__process_mmap2,
+		.mmap3	= perf_event__process_mmap3,
 		.comm	= perf_event__process_comm,
 		.exit	= perf_event__process_exit,
 		.fork	= perf_event__process_fork,
diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c
index 6d2f410d773a..ef31603d126e 100644
--- a/tools/perf/builtin-inject.c
+++ b/tools/perf/builtin-inject.c
@@ -316,6 +316,19 @@ static int perf_event__repipe_mmap2(struct perf_tool *tool,
 	return err;
 }
 
+static int perf_event__repipe_mmap3(struct perf_tool *tool,
+				   union perf_event *event,
+				   struct perf_sample *sample,
+				   struct machine *machine)
+{
+	int err;
+
+	err = perf_event__process_mmap3(tool, event, sample, machine);
+	perf_event__repipe(tool, event, sample, machine);
+
+	return err;
+}
+
 #ifdef HAVE_JITDUMP
 static int perf_event__jit_repipe_mmap2(struct perf_tool *tool,
 					union perf_event *event,
@@ -339,6 +352,29 @@ static int perf_event__jit_repipe_mmap2(struct perf_tool *tool,
 	}
 	return perf_event__repipe_mmap2(tool, event, sample, machine);
 }
+
+static int perf_event__jit_repipe_mmap3(struct perf_tool *tool,
+					union perf_event *event,
+					struct perf_sample *sample,
+					struct machine *machine)
+{
+	struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
+	u64 n = 0;
+	int ret;
+
+	/*
+	 * if jit marker, then inject jit mmaps and generate ELF images
+	 */
+	ret = jit_process(inject->session, &inject->output, machine,
+			  event->mmap3.filename, sample->pid, &n);
+	if (ret < 0)
+		return ret;
+	if (ret) {
+		inject->bytes_written += n;
+		return 0;
+	}
+	return perf_event__repipe_mmap3(tool, event, sample, machine);
+}
 #endif
 
 static int perf_event__repipe_fork(struct perf_tool *tool,
@@ -609,6 +645,7 @@ static int __cmd_inject(struct perf_inject *inject)
 	    inject->itrace_synth_opts.set) {
 		inject->tool.mmap	  = perf_event__repipe_mmap;
 		inject->tool.mmap2	  = perf_event__repipe_mmap2;
+		inject->tool.mmap3	  = perf_event__repipe_mmap3;
 		inject->tool.fork	  = perf_event__repipe_fork;
 		inject->tool.tracing_data = perf_event__repipe_tracing_data;
 	}
@@ -818,6 +855,7 @@ int cmd_inject(int argc, const char **argv)
 #ifdef HAVE_JITDUMP
 	if (inject.jit_mode) {
 		inject.tool.mmap2	   = perf_event__jit_repipe_mmap2;
+		inject.tool.mmap3	   = perf_event__jit_repipe_mmap3;
 		inject.tool.mmap	   = perf_event__jit_repipe_mmap;
 		inject.tool.ordered_events = true;
 		inject.tool.ordering_requires_timestamps = true;
diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c
index a50dae2c4ae9..59f7fe42cb09 100644
--- a/tools/perf/builtin-kmem.c
+++ b/tools/perf/builtin-kmem.c
@@ -969,6 +969,7 @@ static struct perf_tool perf_kmem = {
 	.comm		 = perf_event__process_comm,
 	.mmap		 = perf_event__process_mmap,
 	.mmap2		 = perf_event__process_mmap2,
+	.mmap3		 = perf_event__process_mmap3,
 	.namespaces	 = perf_event__process_namespaces,
 	.ordered_events	 = true,
 };
diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
index 3523279af6af..7be8b4d6f2c9 100644
--- a/tools/perf/builtin-mem.c
+++ b/tools/perf/builtin-mem.c
@@ -383,6 +383,7 @@ int cmd_mem(int argc, const char **argv)
 			.sample		= process_sample_event,
 			.mmap		= perf_event__process_mmap,
 			.mmap2		= perf_event__process_mmap2,
+			.mmap3		= perf_event__process_mmap3,
 			.comm		= perf_event__process_comm,
 			.lost		= perf_event__process_lost,
 			.fork		= perf_event__process_fork,
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index adf311d15d3d..5ce293fac103 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -2366,6 +2366,19 @@ static int build_id__process_mmap2(struct perf_tool *tool, union perf_event *eve
 	return perf_event__process_mmap2(tool, event, sample, machine);
 }
 
+static int build_id__process_mmap3(struct perf_tool *tool, union perf_event *event,
+				   struct perf_sample *sample, struct machine *machine)
+{
+	/*
+	 * We already have the kernel maps, put in place via perf_session__create_kernel_maps()
+	 * no need to add them twice.
+	 */
+	if (!(event->header.misc & PERF_RECORD_MISC_USER))
+		return 0;
+
+	return perf_event__process_mmap3(tool, event, sample, machine);
+}
+
 /*
  * XXX Ideally would be local to cmd_record() and passed to a record__new
  * because we need to have access to it in record__exit, that is called
@@ -2400,6 +2413,7 @@ static struct record record = {
 		.namespaces	= perf_event__process_namespaces,
 		.mmap		= build_id__process_mmap,
 		.mmap2		= build_id__process_mmap2,
+		.mmap3		= build_id__process_mmap3,
 		.ordered_events	= true,
 	},
 };
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 3c74c9c0f3c3..3dd37513eb94 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -731,6 +731,7 @@ static void tasks_setup(struct report *rep)
 	if (rep->mmaps_mode) {
 		rep->tool.mmap = perf_event__process_mmap;
 		rep->tool.mmap2 = perf_event__process_mmap2;
+		rep->tool.mmap3 = perf_event__process_mmap3;
 	}
 	rep->tool.comm = perf_event__process_comm;
 	rep->tool.exit = perf_event__process_exit;
@@ -1120,6 +1121,7 @@ int cmd_report(int argc, const char **argv)
 			.sample		 = process_sample_event,
 			.mmap		 = perf_event__process_mmap,
 			.mmap2		 = perf_event__process_mmap2,
+			.mmap3		 = perf_event__process_mmap3,
 			.comm		 = perf_event__process_comm,
 			.namespaces	 = perf_event__process_namespaces,
 			.cgroup		 = perf_event__process_cgroup,
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 484ce6067d23..d839983cfb88 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -3443,6 +3443,7 @@ int cmd_script(int argc, const char **argv)
 			.sample		 = process_sample_event,
 			.mmap		 = perf_event__process_mmap,
 			.mmap2		 = perf_event__process_mmap2,
+			.mmap3		 = perf_event__process_mmap3,
 			.comm		 = perf_event__process_comm,
 			.namespaces	 = perf_event__process_namespaces,
 			.cgroup		 = perf_event__process_cgroup,
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index bea461b6f937..8d00220c842b 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -4192,6 +4192,7 @@ static int trace__replay(struct trace *trace)
 	trace->tool.sample	  = trace__process_sample;
 	trace->tool.mmap	  = perf_event__process_mmap;
 	trace->tool.mmap2	  = perf_event__process_mmap2;
+	trace->tool.mmap3	  = perf_event__process_mmap3;
 	trace->tool.comm	  = perf_event__process_comm;
 	trace->tool.exit	  = perf_event__process_exit;
 	trace->tool.fork	  = perf_event__process_fork;
diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c
index 6165f9d1d941..b281c97894e0 100644
--- a/tools/perf/util/build-id.c
+++ b/tools/perf/util/build-id.c
@@ -88,6 +88,7 @@ struct perf_tool build_id__mark_dso_hit_ops = {
 	.sample	= build_id__mark_dso_hit,
 	.mmap	= perf_event__process_mmap,
 	.mmap2	= perf_event__process_mmap2,
+	.mmap3	= perf_event__process_mmap3,
 	.fork	= perf_event__process_fork,
 	.exit	= perf_event__exit_del_thread,
 	.attr		 = perf_event__process_attr,
diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c
index 27c5fef9ad54..dbc3eba658a5 100644
--- a/tools/perf/util/data-convert-bt.c
+++ b/tools/perf/util/data-convert-bt.c
@@ -1606,6 +1606,7 @@ int bt_convert__perf2ctf(const char *input, const char *path,
 			.sample          = process_sample_event,
 			.mmap            = perf_event__process_mmap,
 			.mmap2           = perf_event__process_mmap2,
+			.mmap3           = perf_event__process_mmap3,
 			.comm            = perf_event__process_comm,
 			.exit            = perf_event__process_exit,
 			.fork            = perf_event__process_fork,
-- 
2.26.2


  parent reply	other threads:[~2020-09-13 21:04 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-13 21:02 [RFC 00/26] perf: Add mmap3 support Jiri Olsa
2020-09-13 21:02 ` [PATCH 01/26] bpf: Move stack_map_get_build_id into lib Jiri Olsa
2020-09-14  6:09   ` Song Liu
2020-09-13 21:02 ` [PATCH 02/26] perf: Introduce mmap3 version of mmap event Jiri Olsa
2020-09-14  5:38   ` Namhyung Kim
2020-09-14  6:20     ` Song Liu
2020-09-14 19:38       ` Jiri Olsa
2020-09-14 15:28     ` Arnaldo Carvalho de Melo
2020-09-14 16:35       ` peterz
2020-09-14 17:08         ` Ian Rogers
2020-09-14 20:07           ` Jiri Olsa
2020-09-15  5:49             ` Adrian Hunter
2020-09-14 19:38         ` Jiri Olsa
2020-09-14 19:39       ` Jiri Olsa
2020-09-14 22:00         ` Arnaldo Carvalho de Melo
2020-09-15  5:39           ` Adrian Hunter
2020-09-14 19:38     ` Jiri Olsa
2020-09-15  2:54       ` Namhyung Kim
2020-09-14  6:41   ` Stephane Eranian
2020-09-14  9:08     ` peterz
2020-09-14 15:32       ` Arnaldo Carvalho de Melo
2020-09-14 17:26       ` Stephane Eranian
2020-09-14 19:56         ` Jiri Olsa
2020-09-15  0:03         ` Ian Rogers
2020-09-14 15:31     ` Arnaldo Carvalho de Melo
2020-09-14 19:50       ` Jiri Olsa
2020-09-14 22:38         ` Arnaldo Carvalho de Melo
2020-09-14 19:45     ` Jiri Olsa
2020-09-14  9:36   ` peterz
2020-09-13 21:02 ` [PATCH 03/26] tools headers uapi: Sync tools/include/uapi/linux/perf_event.h Jiri Olsa
2020-09-14  5:39   ` Namhyung Kim
2020-09-13 21:02 ` [PATCH 04/26] perf tools: Add filename__decompress function Jiri Olsa
2020-09-14 15:35   ` Arnaldo Carvalho de Melo
2020-09-14 20:43     ` Jiri Olsa
2020-09-17 18:54       ` Arnaldo Carvalho de Melo
2020-09-18 10:51         ` Jiri Olsa
2020-09-13 21:02 ` [PATCH 05/26] perf tools: Add build_id__is_defined function Jiri Olsa
2020-09-14  5:44   ` Namhyung Kim
2020-09-14 16:03     ` Arnaldo Carvalho de Melo
2020-09-14 20:49       ` Jiri Olsa
2020-09-14 20:47     ` Jiri Olsa
2020-09-14 21:51       ` Arnaldo Carvalho de Melo
2020-09-13 21:02 ` [PATCH 06/26] perf tools: Add support to read build id from compressed elf Jiri Olsa
2020-09-14 16:04   ` Arnaldo Carvalho de Melo
2020-09-14 20:49     ` Jiri Olsa
2020-09-13 21:02 ` [PATCH 07/26] perf tools: Add check for existing link in buildid dir Jiri Olsa
2020-09-14  5:54   ` Namhyung Kim
2020-09-14 20:18     ` Jiri Olsa
2020-09-13 21:02 ` [PATCH 08/26] perf tools: Use struct extra_kernel_map in machine__process_kernel_mmap_event Jiri Olsa
2020-09-13 21:02 ` [PATCH 09/26] perf tools: Try load vmlinux from buildid database Jiri Olsa
2020-09-14  6:25   ` Namhyung Kim
2020-09-14 20:29     ` Jiri Olsa
2020-09-15  2:58       ` Namhyung Kim
2020-09-13 21:02 ` [PATCH 10/26] perf tools: Enable mmap3 map event when supported Jiri Olsa
2020-09-14 16:05   ` Arnaldo Carvalho de Melo
2020-09-13 21:02 ` [PATCH 11/26] perf tools: Add mmap3 support Jiri Olsa
2020-09-13 21:02 ` [PATCH 12/26] perf tools: Set build id for kernel dso objects Jiri Olsa
2020-09-13 21:03 ` Jiri Olsa [this message]
2020-09-13 21:03 ` [PATCH 14/26] perf tools: Add mmap3 events to --show-mmap-events option Jiri Olsa
2020-09-14  6:30   ` Namhyung Kim
2020-09-14 20:29     ` Jiri Olsa
2020-09-13 21:03 ` [PATCH 15/26] perf tools: Synthesize proc tasks with mmap3 Jiri Olsa
2020-09-14 16:07   ` Arnaldo Carvalho de Melo
2020-09-14 20:51     ` Jiri Olsa
2020-09-13 21:03 ` [PATCH 16/26] perf tools: Synthesize modules " Jiri Olsa
2020-09-14 16:07   ` Arnaldo Carvalho de Melo
2020-09-15 20:17     ` Ian Rogers
2020-09-16  8:20       ` Jiri Olsa
2020-09-16 14:07         ` Arnaldo Carvalho de Melo
2020-09-16 14:17           ` peterz
2020-09-16 15:10             ` Arnaldo Carvalho de Melo
2020-09-16 15:20               ` peterz
2020-09-16 15:21               ` Jiri Olsa
2020-09-16 15:42                 ` Arnaldo Carvalho de Melo
2020-09-13 21:03 ` [PATCH 17/26] perf tools: Synthesize kernel " Jiri Olsa
2020-09-14 16:08   ` Arnaldo Carvalho de Melo
2020-09-13 21:03 ` [PATCH 18/26] perf tests: Add mmap3 support for perf record test Jiri Olsa
2020-09-13 21:03 ` [PATCH 19/26] perf tools: Add buildid-list support for mmap3 Jiri Olsa
2020-09-13 21:03 ` [PATCH 20/26] perf tools: Add build_id_cache__add function Jiri Olsa
2020-09-14 16:13   ` Arnaldo Carvalho de Melo
2020-09-13 21:03 ` [PATCH 21/26] perf tools: Add machine__for_each_dso function Jiri Olsa
2020-09-14 16:15   ` Arnaldo Carvalho de Melo
2020-09-13 21:03 ` [PATCH 22/26] perf tools: Use machine__for_each_dso in perf_session__cache_build_ids Jiri Olsa
2020-09-13 21:03 ` [PATCH 23/26] perf tools: Add __perf_session__cache_build_ids function Jiri Olsa
2020-09-13 21:03 ` [PATCH 24/26] perf tools: Add buildid-list --store option Jiri Olsa
2020-09-14  6:42   ` Namhyung Kim
2020-09-14 15:14     ` Arnaldo Carvalho de Melo
2020-09-14 20:42       ` Jiri Olsa
2020-09-14 20:42     ` Jiri Olsa
2020-09-13 21:03 ` [PATCH 25/26] perf tools: Move debuginfo download code into get_debuginfo Jiri Olsa
2020-09-13 21:03 ` [PATCH 26/26] perf tools: Add report --store option Jiri Olsa
2020-09-14  5:25 ` [RFC 00/26] perf: Add mmap3 support Namhyung Kim
2020-09-14 15:13   ` Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200913210313.1985612-14-jolsa@kernel.org \
    --to=jolsa@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=alexey.budankov@linux.intel.com \
    --cc=eranian@google.com \
    --cc=fche@redhat.com \
    --cc=irogers@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@kernel.org \
    --cc=mpetlan@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=songliubraving@fb.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox