On Wed, Jan 08, 2025 at 06:06:03PM +0100, Christophe Leroy wrote: > > > Le 08/01/2025 à 15:53, Arnaldo Carvalho de Melo a écrit : > > On Wed, Jan 08, 2025 at 10:54:20AM +0100, Christophe Leroy wrote: > > > Since commit 659ad3492b91 ("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: 659ad3492b91 ("perf maps: Switch from rbtree to lazily sorted > > > array for addresses") > > > Signed-off-by: Christophe Leroy <christophe.le...@csgroup.eu> > > > Reviewed-by: Arnaldo Carvalho de Melo <a...@redhat.com> > > > --- > > > v2: Make sure the entries are sorted, if not sort them. > > > > Since you have changed what I reviewed I'll have to re-review :-) Will > > try to do it after some calls. > > Ah yes sorry, should have removed your Reviewed-by. > > Based on Ian's feedback "Using the next entry in this way won't work if the > entries aren't sorted", I added the following block in front of the initial > change: > > + while (!maps__maps_by_address_sorted(maps)) { > + up_read(maps__lock(maps)); > + maps__sort_by_address(maps); > + down_read(maps__lock(maps)); > + }
Its ok, I'll keep it now that I looked at it. Thanks! - Arnaldo