On Thu, Sep 18, 2025 at 03:10:18PM -0400, Steven Rostedt wrote:
> On Thu, 18 Sep 2025 19:32:20 +0200
> Peter Zijlstra <[email protected]> wrote:
> 
> > > Now, task_work_run() is in the exit_to_user_mode_loop() which is notably
> > > *before* exit_to_user_mode() which does the unwind_reset_info().
> > > 
> > > What happens if we get an NMI requesting an unwind after
> > > unwind_reset_info() while still very much being in the kernel on the way
> > > out?  
> > 
> > AFAICT it will try and do a task_work_add(TWA_RESUME) from NMI context,
> > and this will fail horribly.
> > 
> > If you do something like:
> > 
> >     twa_mode = in_nmi() ? TWA_NMI_CURRENT : TWA_RESUME;
> >     task_work_add(foo, twa_mode);
> > 
> > it might actually work.
> 
> Ah, the comment for TWA_RESUME didn't express this restriction.
> 
> That does look like that would work as the way I expected task_work to
> handle this case.

BTW, I remember Peter had a fix for TWA_NMI_CURRENT, I guess it got lost
in the shuffle or did something else happen in the meantime?

  https://lore.kernel.org/[email protected]

-- 
Josh

Reply via email to