> On Aug 1, 2019, at 7:48 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > >> On Thu, Aug 01, 2019 at 04:32:51PM +0200, Thomas Gleixner wrote: >> +#ifdef CONFIG_HAVE_ARCH_TRACEHOOK >> +/** >> + * tracehook_handle_notify_resume - Notify resume handling for virt >> + * >> + * Called with interrupts and preemption enabled from VMENTER/EXIT. >> + */ >> +void tracehook_handle_notify_resume(void) >> +{ >> + local_irq_disable(); >> + while (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { >> + local_irq_enable(); >> + tracehook_notify_resume(NULL); >> + local_irq_disable(); >> + } >> + local_irq_enable(); > > I'm confused by the IRQ state swizzling here, what is it doing? Me too. Also, why is a loop needed? > >> +} >> +EXPORT_SYMBOL_GPL(tracehook_handle_notify_resume); >> +#endif >> >>