All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.