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/