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.

-- Steve

Reply via email to