Hello Namhyung,

sorry for the fuss!

On 12/12/2025 12:16 PM, Jens Remus wrote:

> On 11/21/2025 12:48 AM, Namhyung Kim wrote:
>> Save samples with deferred callchains in a separate list and deliver
>> them after merging the user callchains.  If users don't want to merge
>> they can set tool->merge_deferred_callchains to false to prevent the
>> behavior.
> 
>> diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c
> 
>> +int sample__merge_deferred_callchain(struct perf_sample *sample_orig,
>> +                                 struct perf_sample *sample_callchain)
>> +{
>> +    u64 nr_orig = sample_orig->callchain->nr - 1;
>> +    u64 nr_deferred = sample_callchain->callchain->nr;
>> +    struct ip_callchain *callchain;
>> +
>> +    if (sample_orig->callchain->nr < 2) {
>> +            sample_orig->deferred_callchain = false;
>> +            return -EINVAL;
>> +    }
>> +
>> +    callchain = calloc(1 + nr_orig + nr_deferred, sizeof(u64));
>> +    if (callchain == NULL) {
>> +            sample_orig->deferred_callchain = false;
>> +            return -ENOMEM;
>> +    }
>> +
>> +    callchain->nr = nr_orig + nr_deferred;
>> +    /* copy original including PERF_CONTEXT_USER_DEFERRED (but the cookie) 
>> */
>> +    memcpy(callchain->ips, sample_orig->callchain->ips, nr_orig * 
>> sizeof(u64));
>> +    /* copy deferred user callchains */
>> +    memcpy(&callchain->ips[nr_orig], sample_callchain->callchain->ips,
>> +           nr_deferred * sizeof(u64));
>> +
>> +    sample_orig->callchain = callchain;
> 
> Hope you don't mind my naive question, as I don't have a clue about perf:
> 
> Doesn't the sample_orig->callchain storage need to be free'd prior to
> assigning the newly allocated one?  Or is that just part of a large
> block that got allocated in one piece?  How is then the one allocated
> here ever free'd?

Never mind, I found that it is getting free'd in
evlist__deliver_deferred_callchain().

> 
>> +    return 0;
>> +}
> Thanks and regards,
> Jens

Regards,
Jens
-- 
Jens Remus
Linux on Z Development (D3303)
+49-7031-16-1128 Office
[email protected]

IBM

IBM Deutschland Research & Development GmbH; Vorsitzender des Aufsichtsrats: 
Wolfgang Wendt; Geschäftsführung: David Faller; Sitz der Gesellschaft: 
Böblingen; Registergericht: Amtsgericht Stuttgart, HRB 243294
IBM Data Privacy Statement: https://www.ibm.com/privacy/


Reply via email to