Patch "perf maps: Fix display of kernel symbols" has been added to the 6.12-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    perf maps: Fix display of kernel symbols

to the 6.12-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     perf-maps-fix-display-of-kernel-symbols.patch
and it can be found in the queue-6.12 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit ebfa81dcae12b3384ffc6373c7959891af3e0617
Author: Christophe Leroy <christophe.leroy@xxxxxxxxxx>
Date:   Wed Jan 8 10:54:20 2025 +0100

    perf maps: Fix display of kernel symbols
    
    [ Upstream commit dae29277fddaaf6670d17dfcbb916a2ca29c912f ]
    
    Since commit 659ad3492b913c90 ("perf maps: Switch from rbtree to lazily
    sorted array for addresses"), perf doesn't display anymore kernel
    symbols on powerpc, allthough it still detects them as kernel addresses.
    
            # Overhead  Command     Shared Object  Symbol
            # ........  ..........  ............. ......................................
            #
                80.49%  Coeur main  [unknown]      [k] 0xc005f0f8
                 3.91%  Coeur main  gau            [.] engine_loop.constprop.0.isra.0
                 1.72%  Coeur main  [unknown]      [k] 0xc005f11c
                 1.09%  Coeur main  [unknown]      [k] 0xc01f82c8
                 0.44%  Coeur main  libc.so.6      [.] epoll_wait
                 0.38%  Coeur main  [unknown]      [k] 0xc0011718
                 0.36%  Coeur main  [unknown]      [k] 0xc01f45c0
    
    This is because function maps__find_next_entry() now returns current
    entry instead of next entry, leading to kernel map end address getting
    mis-configured with its own start address instead of the start address
    of the following map.
    
    Fix it by really taking the next entry, also make sure that entry
    follows current one by making sure entries are sorted.
    
    Fixes: 659ad3492b913c90 ("perf maps: Switch from rbtree to lazily sorted array for addresses")
    Reviewed-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
    Reviewed-by: Ian Rogers <irogers@xxxxxxxxxx>
    Signed-off-by: Christophe Leroy <christophe.leroy@xxxxxxxxxx>
    Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>
    Cc: Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>
    Cc: Ingo Molnar <mingo@xxxxxxxxxx>
    Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
    Cc: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
    Cc: Mark Rutland <mark.rutland@xxxxxxx>
    Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
    Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/2ea4501209d5363bac71a6757fe91c0747558a42.1736329923.git.christophe.leroy@xxxxxxxxxx
    Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/perf/util/maps.c b/tools/perf/util/maps.c
index 432399cbe5dd3..09c9cc326c08d 100644
--- a/tools/perf/util/maps.c
+++ b/tools/perf/util/maps.c
@@ -1136,8 +1136,13 @@ struct map *maps__find_next_entry(struct maps *maps, struct map *map)
 	struct map *result = NULL;
 
 	down_read(maps__lock(maps));
+	while (!maps__maps_by_address_sorted(maps)) {
+		up_read(maps__lock(maps));
+		maps__sort_by_address(maps);
+		down_read(maps__lock(maps));
+	}
 	i = maps__by_address_index(maps, map);
-	if (i < maps__nr_maps(maps))
+	if (++i < maps__nr_maps(maps))
 		result = map__get(maps__maps_by_address(maps)[i]);
 
 	up_read(maps__lock(maps));




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux