Prev: [PATCH 0/4] perf tools improvements and minor fixes
Next: linux-next: manual merge of the wireless-current tree with a fix up patch
From: Arnaldo Carvalho de Melo on 9 May 2010 19:50 From: Arnaldo Carvalho de Melo <acme(a)redhat.com> Which can happen when processing old files that had no fake kernel MMAP, events. That shouldn't result in perf_session__create_kernel_maps not being called, this will be fixed in a followup patch, for now do these checks to avoid segfaulting. Cc: Frédéric Weisbecker <fweisbec(a)gmail.com> Cc: Mike Galbraith <efault(a)gmx.de> Cc: Paul Mackerras <paulus(a)samba.org> Cc: Peter Zijlstra <a.p.zijlstra(a)chello.nl> Cc: Tom Zanussi <tzanussi(a)gmail.com> LKML-Reference: <new-submission> Signed-off-by: Arnaldo Carvalho de Melo <acme(a)redhat.com> --- tools/perf/util/event.c | 17 ++++++++++------- 1 files changed, 10 insertions(+), 7 deletions(-) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 46563e1..c44a5a8 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -493,8 +493,10 @@ int event__process_mmap(event_t *self, struct perf_session *session) return 0; } - thread = perf_session__findnew(session, self->mmap.pid); machine = perf_session__find_host_machine(session); + if (machine == NULL) + goto out_problem; + thread = perf_session__findnew(session, self->mmap.pid); map = map__new(&machine->user_dsos, self->mmap.start, self->mmap.len, self->mmap.pgoff, self->mmap.pid, self->mmap.filename, @@ -552,18 +554,12 @@ void thread__find_addr_map(struct thread *self, if (cpumode == PERF_RECORD_MISC_KERNEL && perf_host) { al->level = 'k'; machine = perf_session__find_host_machine(session); - mg = &machine->kmaps; } else if (cpumode == PERF_RECORD_MISC_USER && perf_host) { al->level = '.'; machine = perf_session__find_host_machine(session); } else if (cpumode == PERF_RECORD_MISC_GUEST_KERNEL && perf_guest) { al->level = 'g'; machine = perf_session__find_machine(session, pid); - if (!machine) { - al->map = NULL; - return; - } - mg = &machine->kmaps; } else { /* * 'u' means guest os user space. @@ -586,6 +582,13 @@ void thread__find_addr_map(struct thread *self, return; } + + if (machine == NULL) { + al->map = NULL; + return; + } + + mg = &machine->kmaps; try_again: al->map = map_groups__find(mg, type, al->addr); if (al->map == NULL) { -- 1.6.2.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |