perf map: Add accessors for ->prot, ->priv and ->flags
authorIan Rogers <irogers@google.com>
Tue, 4 Apr 2023 20:59:45 +0000 (13:59 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 7 Apr 2023 01:10:59 +0000 (22:10 -0300)
Later changes will add reference count checking for 'struct map'. Add an
accessor so that the reference count check is only necessary in one
place.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Darren Hart <dvhart@infradead.org>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Dmitriy Vyukov <dvyukov@google.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: German Gomez <german.gomez@arm.com>
Cc: Hao Luo <haoluo@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Miaoqian Lin <linmq006@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Riccardo Mancini <rickyman7@gmail.com>
Cc: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
Cc: Song Liu <song@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Stephen Brennan <stephen.s.brennan@oracle.com>
Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Yury Norov <yury.norov@gmail.com>
Link: https://lore.kernel.org/r/20230404205954.2245628-2-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-inject.c
tools/perf/builtin-report.c
tools/perf/tests/vmlinux-kallsyms.c
tools/perf/util/map.h
tools/perf/util/sort.c
tools/perf/util/symbol.c

index 8f6909dd8a543a7fbce9d1f5ab484d39c8688a0b..fd2b38458a5d46b28c8a91632a9e722e46e421a5 100644 (file)
@@ -758,7 +758,7 @@ int perf_event__inject_buildid(struct perf_tool *tool, union perf_event *event,
                if (!dso->hit) {
                        dso->hit = 1;
                        dso__inject_build_id(dso, tool, machine,
-                                            sample->cpumode, al.map->flags);
+                                            sample->cpumode, map__flags(al.map));
                }
        }
 
index 2a6e2cee5e0d89fec3ab6520dba3ab7826c91e14..c066452219c821c95c082d88fad6aeca162e7732 100644 (file)
@@ -849,13 +849,14 @@ static size_t maps__fprintf_task(struct maps *maps, int indent, FILE *fp)
        maps__for_each_entry(maps, rb_node) {
                struct map *map = rb_node->map;
                const struct dso *dso = map__dso(map);
+               u32 prot = map__prot(map);
 
                printed += fprintf(fp, "%*s  %" PRIx64 "-%" PRIx64 " %c%c%c%c %08" PRIx64 " %" PRIu64 " %s\n",
                                   indent, "", map__start(map), map__end(map),
-                                  map->prot & PROT_READ ? 'r' : '-',
-                                  map->prot & PROT_WRITE ? 'w' : '-',
-                                  map->prot & PROT_EXEC ? 'x' : '-',
-                                  map->flags & MAP_SHARED ? 's' : 'p',
+                                  prot & PROT_READ ? 'r' : '-',
+                                  prot & PROT_WRITE ? 'w' : '-',
+                                  prot & PROT_EXEC ? 'x' : '-',
+                                  map__flags(map) ? 's' : 'p',
                                   map->pgoff,
                                   dso->id.ino, dso->name);
        }
index 05a322ea3f9f29f27a22e8035b154291a33d1d66..7db102868bc20f7479dee38281f9619af8b86a07 100644 (file)
@@ -323,7 +323,7 @@ next_pair:
                mem_end = map__unmap_ip(vmlinux_map, map__end(map));
 
                pair = maps__find(kallsyms.kmaps, mem_start);
-               if (pair == NULL || pair->priv)
+               if (pair == NULL || map__priv(pair))
                        continue;
 
                if (map__start(pair) == mem_start) {
@@ -351,7 +351,7 @@ next_pair:
        maps__for_each_entry(maps, rb_node) {
                struct map *map = rb_node->map;
 
-               if (!map->priv) {
+               if (!map__priv(map)) {
                        if (!header_printed) {
                                pr_info("WARN: Maps only in kallsyms:\n");
                                header_printed = true;
index 9118eba710325b700eb7c19ed9f5ddaccb3860d7..fd440c9c279ef1b1aeb8ae2e430016aa6cd94ebe 100644 (file)
@@ -72,6 +72,21 @@ static inline u64 map__end(const struct map *map)
        return map->end;
 }
 
+static inline u32 map__flags(const struct map *map)
+{
+       return map->flags;
+}
+
+static inline u32 map__prot(const struct map *map)
+{
+       return map->prot;
+}
+
+static inline bool map__priv(const struct map *map)
+{
+       return map->priv;
+}
+
 static inline size_t map__size(const struct map *map)
 {
        return map__end(map) - map__start(map);
index 87a3ba584af55bd131378df99742f24604e93432..80c9960c37e58388ff59d6a3e5fbed289de4943b 100644 (file)
@@ -1540,7 +1540,7 @@ sort__dcacheline_cmp(struct hist_entry *left, struct hist_entry *right)
         */
 
        if ((left->cpumode != PERF_RECORD_MISC_KERNEL) &&
-           (!(l_map->flags & MAP_SHARED)) && !l_dso->id.maj && !l_dso->id.min &&
+           (!(map__flags(l_map) & MAP_SHARED)) && !l_dso->id.maj && !l_dso->id.min &&
            !l_dso->id.ino && !l_dso->id.ino_generation) {
                /* userspace anonymous */
 
@@ -1576,8 +1576,8 @@ static int hist_entry__dcacheline_snprintf(struct hist_entry *he, char *bf,
 
                /* print [s] for shared data mmaps */
                if ((he->cpumode != PERF_RECORD_MISC_KERNEL) &&
-                    map && !(map->prot & PROT_EXEC) &&
-                   (map->flags & MAP_SHARED) &&
+                    map && !(map__prot(map) & PROT_EXEC) &&
+                    (map__flags(map) & MAP_SHARED) &&
                    (dso->id.maj || dso->id.min || dso->id.ino || dso->id.ino_generation))
                        level = 's';
                else if (!map)
index 9ba49c1ef6efd7023bb318034434f9d373627cf5..5c075d77a792bf3667921f76cdffbcd08bed07d6 100644 (file)
@@ -1396,7 +1396,7 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
        }
 
        /* Read new maps into temporary lists */
-       err = file__read_maps(fd, map->prot & PROT_EXEC, kcore_mapfn, &md,
+       err = file__read_maps(fd, map__prot(map) & PROT_EXEC, kcore_mapfn, &md,
                              &is_64_bit);
        if (err)
                goto out_err;
@@ -1509,7 +1509,7 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
 
        close(fd);
 
-       if (map->prot & PROT_EXEC)
+       if (map__prot(map) & PROT_EXEC)
                pr_debug("Using %s for kernel object code\n", kcore_filename);
        else
                pr_debug("Using %s for kernel data\n", kcore_filename);