lkml.org 
[lkml]   [2023]   [Mar]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
Subject[PATCH v5 08/17] perf map: Add accessors for prot, priv and flags
From
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>
---
tools/perf/builtin-inject.c | 2 +-
tools/perf/builtin-report.c | 9 +++++----
tools/perf/tests/vmlinux-kallsyms.c | 4 ++--
tools/perf/util/map.h | 15 +++++++++++++++
tools/perf/util/sort.c | 6 +++---
tools/perf/util/symbol.c | 4 ++--
6 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c
index 8f6909dd8a54..fd2b38458a5d 100644
--- a/tools/perf/builtin-inject.c
+++ b/tools/perf/builtin-inject.c
@@ -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));
}
}

diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 4ce1aef3e253..8650d9503b77 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -845,13 +845,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);
}
diff --git a/tools/perf/tests/vmlinux-kallsyms.c b/tools/perf/tests/vmlinux-kallsyms.c
index 05a322ea3f9f..7db102868bc2 100644
--- a/tools/perf/tests/vmlinux-kallsyms.c
+++ b/tools/perf/tests/vmlinux-kallsyms.c
@@ -323,7 +323,7 @@ static int test__vmlinux_matches_kallsyms(struct test_suite *test __maybe_unused
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 @@ static int test__vmlinux_matches_kallsyms(struct test_suite *test __maybe_unused
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;
diff --git a/tools/perf/util/map.h b/tools/perf/util/map.h
index 9118eba71032..fd440c9c279e 100644
--- a/tools/perf/util/map.h
+++ b/tools/perf/util/map.h
@@ -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);
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index 321d4859ae16..31a8df42cb2f 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -1499,7 +1499,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 */

@@ -1535,8 +1535,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)
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 128d4a66cc0e..e3758519e4d1 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -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;
@@ -1508,7 +1508,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);
--
2.40.0.rc1.284.g88254d51c5-goog
\
 
 \ /
  Last update: 2023-03-27 01:10    [W:0.191 / U:0.828 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site