Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e94b861a authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

perf map: Introduce map__has_symbols()

To further simplify checking if symbols are available for a given map
and to reduce the number of users of MAP__{FUNCTION,VARIABLE}.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-iyfoyvbfdti5uehgpjum3qrq@git.kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent d88205db
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -523,13 +523,10 @@ static void report__warn_kptr_restrict(const struct report *rep)
		    "As no suitable kallsyms nor vmlinux was found, kernel samples\n"
		    "can't be resolved.";

		if (kernel_map) {
			const struct dso *kdso = kernel_map->dso;
			if (dso__has_symbols(kdso, MAP__FUNCTION)) {
		if (kernel_map && map__has_symbols(kernel_map)) {
			desc = "If some relocation was applied (e.g. "
			       "kexec) symbols may be misresolved.";
		}
		}

		ui__warning(
"Kernel address maps (/proc/{kallsyms,modules}) were restricted.\n\n"
+2 −3
Original line number Diff line number Diff line
@@ -742,7 +742,7 @@ static void perf_event__process_sample(struct perf_tool *tool,
"Kernel address maps (/proc/{kallsyms,modules}) are restricted.\n\n"
"Check /proc/sys/kernel/kptr_restrict.\n\n"
"Kernel%s samples will not be resolved.\n",
			  al.map && dso__has_symbols(al.map->dso, MAP__FUNCTION) ?
			  al.map && map__has_symbols(al.map) ?
			  " modules" : "");
			if (use_browser <= 0)
				sleep(5);
@@ -764,8 +764,7 @@ static void perf_event__process_sample(struct perf_tool *tool,
		 * invalid --vmlinux ;-)
		 */
		if (!machine->kptr_restrict_warned && !top->vmlinux_warned &&
		    __map__is_kernel(al.map) &&
		    dso__has_symbols(al.map->dso, MAP__FUNCTION)) {
		    __map__is_kernel(al.map) && map__has_symbols(al.map)) {
			if (symbol_conf.vmlinux_name) {
				char serr[256];
				dso__strerror_load(al.map->dso, serr, sizeof(serr));
+5 −0
Original line number Diff line number Diff line
@@ -259,6 +259,11 @@ bool __map__is_kernel(const struct map *map)
	return __machine__kernel_map(map->groups->machine, map->type) == map;
}

bool map__has_symbols(const struct map *map)
{
	return dso__has_symbols(map->dso, map->type);
}

static void map__exit(struct map *map)
{
	BUG_ON(!RB_EMPTY_NODE(&map->rb_node));
+2 −0
Original line number Diff line number Diff line
@@ -264,4 +264,6 @@ static inline bool __map__is_kmodule(const struct map *map)
	return !__map__is_kernel(map);
}

bool map__has_symbols(const struct map *map);

#endif /* __PERF_MAP_H */