Re: [PATCH v5 11/18] perf tools: add mem access sampling core support

From: Stephane Eranian
Date: Thu Jan 10 2013 - 16:53:12 EST


On Wed, Jan 9, 2013 at 5:55 PM, Jiri Olsa <jolsa@xxxxxxxxxx> wrote:
> On Mon, Jan 07, 2013 at 07:27:50PM +0100, Stephane Eranian wrote:
>
> SNIP
>
>>
>> +static void ip__resolve_data(struct machine *self, struct thread *thread,
>> + u8 m,
>> + struct addr_map_symbol *ams,
>> + u64 addr)
>> +{
>> + struct addr_location al;
>> +
>> + memset(&al, 0, sizeof(al));
>> +
>> + thread__find_addr_location(thread, self, m, MAP__VARIABLE, addr, &al,
>> + NULL);
>> + ams->addr = addr;
>> + ams->al_addr = al.addr;
>> + ams->sym = al.sym;
>> + ams->map = al.map;
>> +}
>> +
>> +struct mem_info *machine__resolve_mem(struct machine *self,
>> + struct thread *thr,
>> + struct perf_sample *sample,
>> + u8 cpumode)
>> +{
>> + struct mem_info *mi;
>> +
>> + mi = calloc(1, sizeof(struct mem_info));
>> + if (!mi)
>> + return NULL;
>> +
>> + ip__resolve_ams(self, thr, &mi->iaddr, sample->ip);
>> + ip__resolve_data(self, thr, cpumode, &mi->daddr, sample->addr);
>> + mi->cost = sample->weight;
>> + mi->dsrc.val = sample->dsrc;
>> +
>> + return mi;
>> +}
>> +
>
> The crash I report is due to the some maps could be removed
> via map_groups__fixup_overlappings.
>
> Attached patch makes the code working for me, but we might
> want to have some global unified fix for that, since this
> is not the only place suffering for that.
>
> Like globaly set map->referenced in add_hist_entry or
> hist_entry__new functions..
>
>
Would something like that work for you (untested)?

diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index 7034500..fc05b9f 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -274,6 +274,12 @@ static struct hist_entry *hist_entry__new(struct
hist_entry *template)

if (he->ms.map)
he->ms.map->referenced = true;
+ if (he->mem_info) {
+ if (he->mem_info->iaddr.map)
+ he->mem_info->iaddr.map->referenced = true;
+ if (he->mem_info->daddr.map)
+ he->mem_info->daddr.map->referenced = true;
+ }
if (symbol_conf.use_callchain)
callchain_init(he->callchain);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/