On Tue, 15 Jul 2025 12:29:12 +0200
Peter Zijlstra <pet...@infradead.org> wrote:

> @@ -170,41 +193,62 @@ static void unwind_deferred_task_work(st
>  int unwind_deferred_request(struct unwind_work *work, u64 *cookie)
>  {
>       struct unwind_task_info *info = &current->unwind_info;
> -     int ret;
> +     unsigned long bits, mask;
> +     int bit, ret;
>  
>       *cookie = 0;
>  
> -     if (WARN_ON_ONCE(in_nmi()))
> -             return -EINVAL;
> -
>       if ((current->flags & (PF_KTHREAD | PF_EXITING)) ||
>           !user_mode(task_pt_regs(current)))
>               return -EINVAL;
>  
> +     /* NMI requires having safe cmpxchg operations */
> +     if (WARN_ON_ONCE(!UNWIND_NMI_SAFE && in_nmi()))
> +             return -EINVAL;

I don't think we want to have a WARN_ON() here as the perf series tries
to first do the deferred unwinding and if that fails, it will go back
to it's old method.

By having a WARN_ON(), we need to make perf aware of this limitation
too. Do we want to do that?

-- Steve

Reply via email to