On Tue, Jul 15, 2025 at 01:20:16PM -0400, Steven Rostedt wrote: > 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 = ¤t->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.
The thing is, I don't think we have an architecture that supports NMIs and does not have NMI safe cmpxchg. And if we do have one such -- I don't think it has perf; perf very much assumes cmpxchg is NMI safe. Calling this from NMI context and not having an NMI safe cmpxchg is very much a dodgy use case. Please leave the WARN, if it ever triggers, we'll look at who manages and deal with it then.