perf machine: Introduce machine__kernel_maps()
authorArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 24 Apr 2018 20:06:25 +0000 (17:06 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 26 Apr 2018 16:47:10 +0000 (13:47 -0300)
That returns the a data structure contained the ordered list of kernel
modules + the main kernel maps, one more step in removing the
MAP__{FUNCTION,VARIABLE} split.

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-qsgbxfyaohc80c9ma049dubm@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/tests/vmlinux-kallsyms.c
tools/perf/util/event.c
tools/perf/util/machine.h
tools/perf/util/probe-event.c

index d80416e07f4bf15c471d8e1a965d4bdad3e1f5f8..9bb84fe365e2c2c84c99ebd54643edbc2496b6b3 100644 (file)
@@ -20,7 +20,7 @@ int test__vmlinux_matches_kallsyms(struct test *test __maybe_unused, int subtest
        struct map *kallsyms_map, *vmlinux_map, *map;
        struct machine kallsyms, vmlinux;
        enum map_type type = MAP__FUNCTION;
-       struct maps *maps = &vmlinux.kmaps.maps[type];
+       struct maps *maps = machine__kernel_maps(&vmlinux);
        u64 mem_start, mem_end;
        bool header_printed;
 
@@ -228,7 +228,7 @@ next_pair:
 
        header_printed = false;
 
-       maps = &kallsyms.kmaps.maps[type];
+       maps = machine__kernel_maps(&kallsyms);
 
        for (map = maps__first(maps); map; map = map__next(map)) {
                if (!map->priv) {
index 9d94c59046d13b905038db4ef5a7ea8520435204..542bd5b79e48535d1533eb80e0a07c6ea2800886 100644 (file)
@@ -464,8 +464,7 @@ int perf_event__synthesize_modules(struct perf_tool *tool,
 {
        int rc = 0;
        struct map *pos;
-       struct map_groups *kmaps = &machine->kmaps;
-       struct maps *maps = &kmaps->maps[MAP__FUNCTION];
+       struct maps *maps = machine__kernel_maps(machine);
        union perf_event *event = zalloc((sizeof(event->mmap) +
                                          machine->id_hdr_size));
        if (event == NULL) {
index 66cc200ef86f20282cba3732cd0635cd13f05931..92303ac718a69fdd6c11e6f6f7a6d365bf0d77ab 100644 (file)
@@ -70,12 +70,24 @@ struct map *__machine__kernel_map(struct machine *machine, enum map_type type)
        return machine->vmlinux_maps[type];
 }
 
+/*
+ * The main kernel (vmlinux) map
+ */
 static inline
 struct map *machine__kernel_map(struct machine *machine)
 {
        return __machine__kernel_map(machine, MAP__FUNCTION);
 }
 
+/*
+ * kernel (the one returned by machine__kernel_map()) plus kernel modules maps
+ */
+static inline
+struct maps *machine__kernel_maps(struct machine *machine)
+{
+       return &machine->kmaps.maps[MAP__FUNCTION];
+}
+
 int machine__get_kernel_start(struct machine *machine);
 
 static inline u64 machine__kernel_start(struct machine *machine)
index d5e2516d59818b6a913e31cdfdc8d4b900046aa2..50139764c6d7a77067e2bdc8b9627fcccd75d292 100644 (file)
@@ -161,8 +161,7 @@ static int kernel_get_symbol_address_by_name(const char *name, u64 *addr,
 
 static struct map *kernel_get_module_map(const char *module)
 {
-       struct map_groups *grp = &host_machine->kmaps;
-       struct maps *maps = &grp->maps[MAP__FUNCTION];
+       struct maps *maps = machine__kernel_maps(host_machine);
        struct map *pos;
 
        /* A file path -- this is an offline module */