Re: [PATCH v4 28/39] unwind_user/deferred: Add deferred unwinding interface

From: Peter Zijlstra
Date: Wed Jan 22 2025 - 08:44:41 EST


On Tue, Jan 21, 2025 at 06:31:20PM -0800, Josh Poimboeuf wrote:

> +/* entry-from-user counter */
> +static DEFINE_PER_CPU(u64, unwind_ctx_ctr);

AFAICT from the below, this thing does *not* count entry-from-user. It
might count a subset, but I need to stare longer.

> +/*
> + * Read the task context cookie, first initializing it if this is the first
> + * call to get_cookie() since the most recent entry from user.
> + */
> +static u64 get_cookie(struct unwind_task_info *info)
> +{
> + u64 ctx_ctr;
> + u64 cookie;
> + u64 cpu;
> +
> + guard(irqsave)();
> +
> + cookie = info->cookie;
> + if (cookie)
> + return cookie;
> +
> +
> + cpu = raw_smp_processor_id();
> + ctx_ctr = __this_cpu_inc_return(unwind_ctx_ctr);
> + info->cookie = ctx_to_cookie(cpu, ctx_ctr);
> +
> + return cookie;
> +
> +}
> +
> +static void unwind_deferred_task_work(struct callback_head *head)
> +{

> + cookie = get_cookie(info);

> +}
> +

> +int unwind_deferred_request(struct unwind_work *work, u64 *cookie)
> +{

> + *cookie = get_cookie(info);

> +}