Re: [PATCH v3 15/19] perf: Add deferred user callchains

From: Peter Zijlstra
Date: Tue Oct 29 2024 - 10:06:38 EST


On Mon, Oct 28, 2024 at 02:47:42PM -0700, Josh Poimboeuf wrote:
> diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
> index 2278402b7ac9..eeb15ba0137f 100644
> --- a/kernel/events/callchain.c
> +++ b/kernel/events/callchain.c
> @@ -217,7 +217,7 @@ static void fixup_uretprobe_trampoline_entries(struct perf_callchain_entry *entr
>
> struct perf_callchain_entry *
> get_perf_callchain(struct pt_regs *regs, bool kernel, bool user,
> - u32 max_stack, bool add_mark)
> + u32 max_stack, bool add_mark, bool defer_user)
> {
> struct perf_callchain_entry *entry;
> struct perf_callchain_entry_ctx ctx;
> @@ -246,6 +246,15 @@ get_perf_callchain(struct pt_regs *regs, bool kernel, bool user,
> regs = task_pt_regs(current);
> }
>
> + if (defer_user) {
> + /*
> + * Foretell the coming of PERF_RECORD_CALLCHAIN_DEFERRED
> + * which can be stitched to this one.
> + */
> + perf_callchain_store_context(&ctx, PERF_CONTEXT_USER_DEFERRED);
> + goto exit_put;
> + }
> +
> if (add_mark)
> perf_callchain_store_context(&ctx, PERF_CONTEXT_USER);

Given that the whole deferred thing doesn't handle COMPAT, this will
break thing, no?