Add print support for events of type PERF_RECORD_NAMESPACES. Signed-off-by: Hari Bathini <hbath...@linux.vnet.ibm.com> --- tools/perf/util/event.c | 30 ++++++++++++++++++++++++++++++ tools/perf/util/event.h | 1 + tools/perf/util/machine.c | 3 +++ 3 files changed, 34 insertions(+)
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index c8c112a..43b6a8f 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -1104,6 +1104,33 @@ size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp) return fprintf(fp, "%s: %s:%d/%d\n", s, event->comm.comm, event->comm.pid, event->comm.tid); } +size_t perf_event__fprintf_namespaces(union perf_event *event, FILE *fp) +{ + size_t ret = 0; + struct perf_ns_link_info *ns_link_info; + u32 nr_namespaces, idx; + + ns_link_info = event->namespaces.link_info; + nr_namespaces = event->namespaces.nr_namespaces; + + ret += fprintf(fp, " %d/%d - nr_namespaces: %u\n\t[", + event->namespaces.pid, + event->namespaces.tid, + nr_namespaces); + + for (idx = 0; idx < nr_namespaces; idx++) { + if (idx && (idx % 4 == 0)) + ret += fprintf(fp, "\n\t "); + + ret += fprintf(fp, "%u/%s: %lu/0x%lx%s", idx, + perf_ns__name(idx), (u64)ns_link_info[idx].dev, + (u64)ns_link_info[idx].ino, + ((idx + 1) != nr_namespaces) ? ", " : "]\n\n"); + } + + return ret; +} + int perf_event__process_comm(struct perf_tool *tool __maybe_unused, union perf_event *event, struct perf_sample *sample, @@ -1300,6 +1327,9 @@ size_t perf_event__fprintf(union perf_event *event, FILE *fp) case PERF_RECORD_MMAP: ret += perf_event__fprintf_mmap(event, fp); break; + case PERF_RECORD_NAMESPACES: + ret += perf_event__fprintf_namespaces(event, fp); + break; case PERF_RECORD_MMAP2: ret += perf_event__fprintf_mmap2(event, fp); break; diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h index c73ad47..8eb470b 100644 --- a/tools/perf/util/event.h +++ b/tools/perf/util/event.h @@ -673,6 +673,7 @@ size_t perf_event__fprintf_itrace_start(union perf_event *event, FILE *fp); size_t perf_event__fprintf_switch(union perf_event *event, FILE *fp); size_t perf_event__fprintf_thread_map(union perf_event *event, FILE *fp); size_t perf_event__fprintf_cpu_map(union perf_event *event, FILE *fp); +size_t perf_event__fprintf_namespaces(union perf_event *event, FILE *fp); size_t perf_event__fprintf(union perf_event *event, FILE *fp); u64 kallsyms__get_function_start(const char *kallsyms_filename, diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 060fabb..5f46ad0 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -519,6 +519,9 @@ int machine__process_namespaces_event(struct machine *machine __maybe_unused, "\nWARNING: perf tool seems to support more namespaces than" " the kernel.\nTry updating the kernel..\n\n"); + if (dump_trace) + perf_event__fprintf_namespaces(event, stdout); + if (thread == NULL || thread__set_namespaces(thread, sample->time, &event->namespaces)) { dump_printf("problem processing PERF_RECORD_NAMESPACES, skipping event.\n");