perf trace: Warn when trying to resolve kernel addresses with kptr_restrict=1
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: caf8a0d0499792ac1b3f5b0b84e5890df0039cb6 Gitweb: http://git.kernel.org/tip/caf8a0d0499792ac1b3f5b0b84e5890df0039cb6 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Tue, 17 May 2016 11:56:24 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Fri, 20 May 2016 11:43:54 -0300
perf trace: Warn when trying to resolve kernel addresses with kptr_restrict=1
Hook into the libtraceevent plugin kernel symbol resolver to warn the user that that can't happen with kptr_restrict=1.
Cc Adrian Hunter <[email protected]>
Cc David Ahern <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Milian Wolff <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-trace.c | 20 +++++++++++++++++++- tools/perf/util/machine.c | 1 + tools/perf/util/machine.h | 1 + 3 files changed, 21 insertions(+), 1 deletion(-)
tools/perf/builtin-trace.c +19 -1
@@ -1160,6 +1160,24 @@ static int trace__tool_process(struct perf_tool *tool,return trace__process_event (trace, machine, event, sample); } +static char *trace__machine__resolve_kernel_addr (void *vmachine,unsigned long long *addrp,char **modp) +{ +struct machine *machine = vmachine; + +if (machine->kptr_restrict_warned) +return NULL ; + +if (symbol_conf.kptr_restrict) { +pr_warning ("Kernel address maps (/proc/{kallsyms,modules}) are restricted.\n\n" +"Check /proc/sys/kernel/kptr_restrict.\n\n" +"Kernel samples will not be resolved.\n" ); + machine->kptr_restrict_warned = true; +return NULL ; + } + +return machine__resolve_kernel_addr (vmachine, addrp, modp); +} +static int trace__symbols_init (struct trace *trace,struct perf_evlist *evlist) {int err =symbol__init (NULL );
@@ -1171,7 +1189,7 @@ static int trace__symbols_init(struct trace *trace, struct perf_evlist *evlist)if (trace->host ==NULL )return -ENOMEM ; -if (trace_event__register_resolver (trace->host, machine__resolve_kernel_addr) <0 ) +if (trace_event__register_resolver (trace->host, trace__machine__resolve_kernel_addr) <0 )return -errno; err = __machine__synthesize_threads(trace->host, &trace->tool, &trace->opts.target,
tools/perf/util/machine.c +1 -0
@@ -43,6 +43,7 @@ int machine__init(struct machine *machine, const char *root_dir, pid_t pid) machine->symbol_filter =NULL ; machine->id_hdr_size =0 ; + machine->kptr_restrict_warned = false; machine->comm_exec = false; machine->kernel_start =0 ;
tools/perf/util/machine.h +1 -0
@@ -28,6 +28,7 @@ struct machine {pid_t pid;u16 id_hdr_size;bool comm_exec; +bool kptr_restrict_warned;char *root_dir;struct rb_root threads;pthread_rwlock_t threads_lock;