]> git.itanic.dy.fi Git - linux-stable/commitdiff
perf tools: Do not remove addr_location.thread in thread__find_map()
authorNamhyung Kim <namhyung@kernel.org>
Tue, 27 Jun 2023 00:02:27 +0000 (17:02 -0700)
committerNamhyung Kim <namhyung@kernel.org>
Fri, 30 Jun 2023 05:12:29 +0000 (22:12 -0700)
The thread__find_map() is to find a map for a given address in the
given thread's address space.  It searches maps based on the cpu mode
and fills various information in the addr_location data structure.

It might change al->maps and al->map, but not al->thread.  Then I
think no reason to not set the al->thread at the beginning.

Also get rid of the duplicate 'al->map = NULL' part.

Fixes: 0dd5041c9a0ea ("perf addr_location: Add init/exit/copy functions")
Acked-by: Ian Rogers <irogers@google.com>
Acked-by: James Clark <james.clark@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/event.c

index 3860b0c74829a3cdfbb2fa8c9be34943540366b2..4cbb092e0684c037194367f4ec7bffd1b5b48a95 100644 (file)
@@ -581,15 +581,14 @@ struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr,
        maps__zput(al->maps);
        map__zput(al->map);
        thread__zput(al->thread);
+       al->thread = thread__get(thread);
 
        al->addr = addr;
        al->cpumode = cpumode;
        al->filtered = 0;
 
-       if (machine == NULL) {
-               al->map = NULL;
+       if (machine == NULL)
                return NULL;
-       }
 
        if (cpumode == PERF_RECORD_MISC_KERNEL && perf_host) {
                al->level = 'k';
@@ -605,7 +604,6 @@ struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr,
                al->level = 'u';
        } else {
                al->level = 'H';
-               al->map = NULL;
 
                if ((cpumode == PERF_RECORD_MISC_GUEST_USER ||
                        cpumode == PERF_RECORD_MISC_GUEST_KERNEL) &&
@@ -619,7 +617,6 @@ struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr,
                return NULL;
        }
        al->maps = maps__get(maps);
-       al->thread = thread__get(thread);
        al->map = map__get(maps__find(maps, al->addr));
        if (al->map != NULL) {
                /*