On Mon, Feb 19, 2018 at 11:20:36AM +0900, Namhyung Kim wrote: SNIP
> > +static void machine__set_kernel_mmap(struct machine *machine, > > + u64 start, u64 end) > > +{ > > + int i; > > + > > + for (i = 0; i < MAP__NR_TYPES; i++) { > > + machine->vmlinux_maps[i]->start = start; > > + machine->vmlinux_maps[i]->end = end; > > + > > + /* > > + * Be a bit paranoid here, some perf.data file came with > > + * a zero sized synthesized MMAP event for the kernel. > > + */ > > + if (machine->vmlinux_maps[i]->end == 0) > > + machine->vmlinux_maps[i]->end = ~0ULL; > > Hmm.. this will make map_groups__fixup_end() below not working since > it only updates if the end address of a map is zero. > > And about the paranoid check, AFAIK the only case it cares is the > machine__process_kernel_mmap_event() which calls it with > event->mmap.start and event->mmap.start + event->mmap.len. Thus, in > order for the end to be zero, both start and len should be zero. Then > I think this condition can be changed like below: > > diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c > index fe27ef55cbb9..c8acb603c359 100644 > --- a/tools/perf/util/machine.c > +++ b/tools/perf/util/machine.c > @@ -1226,7 +1226,7 @@ static void machine__set_kernel_mmap(struct machine > *machine, > * Be a bit paranoid here, some perf.data file came with > * a zero sized synthesized MMAP event for the kernel. > */ > - if (machine->vmlinux_maps[i]->end == 0) > + if (start == 0 && end == 0) > machine->vmlinux_maps[i]->end = ~0ULL; > } right, the call from machine__create_kernel_maps will have always the start != 0 and there will be subsequent map_groups__fixup_end call.. seems ok to me.. will you send the patch? thanks, jirka