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 <jo...@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

Reply via email to