Hello Namhyung!

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?

> +     return 0;
> +}
Thanks and 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