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. By having a WARN_ON(), we need to make perf aware of this limitation too. Do we want to do that? -- Steve