perf symbols: Rename kthreads to kmaps, using another abstraction for it
Using a struct thread instance just to hold the kernel space maps (vmlinux + modules) is overkill and confuses people trying to understand the perf symbols abstractions. The kernel maps are really present in all threads, i.e. the kernel is a library, not a separate thread. So introduce the 'map_groups' abstraction and use it for the kernel maps, now in the kmaps global variable. It, in turn, will move, together with the threads list to the perf_file abstraction, so that we can support multiple perf_file instances, needed by perf diff. Brainstormed-with: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Eduardo Habkost <ehabkost@redhat.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> LKML-Reference: <1260550239-5372-1-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
committed by
Ingo Molnar
parent
58e9f94138
commit
9958e1f0ae
@@ -254,13 +254,14 @@ void thread__find_addr_location(struct thread *self, u8 cpumode,
|
||||
struct addr_location *al,
|
||||
symbol_filter_t filter)
|
||||
{
|
||||
struct thread *thread = al->thread = self;
|
||||
struct map_groups *mg = &self->mg;
|
||||
|
||||
al->thread = self;
|
||||
al->addr = addr;
|
||||
|
||||
if (cpumode & PERF_RECORD_MISC_KERNEL) {
|
||||
al->level = 'k';
|
||||
thread = kthread;
|
||||
mg = kmaps;
|
||||
} else if (cpumode & PERF_RECORD_MISC_USER)
|
||||
al->level = '.';
|
||||
else {
|
||||
@@ -270,7 +271,7 @@ void thread__find_addr_location(struct thread *self, u8 cpumode,
|
||||
return;
|
||||
}
|
||||
try_again:
|
||||
al->map = thread__find_map(thread, type, al->addr);
|
||||
al->map = map_groups__find(mg, type, al->addr);
|
||||
if (al->map == NULL) {
|
||||
/*
|
||||
* If this is outside of all known maps, and is a negative
|
||||
@@ -281,8 +282,8 @@ try_again:
|
||||
* "[vdso]" dso, but for now lets use the old trick of looking
|
||||
* in the whole kernel symbol list.
|
||||
*/
|
||||
if ((long long)al->addr < 0 && thread != kthread) {
|
||||
thread = kthread;
|
||||
if ((long long)al->addr < 0 && mg != kmaps) {
|
||||
mg = kmaps;
|
||||
goto try_again;
|
||||
}
|
||||
al->sym = NULL;
|
||||
|
Reference in New Issue
Block a user