On Tue, Sep 09, 2025 at 11:07:36AM +0200, David Hildenbrand wrote: > On 08.09.25 09:39, Kevin Brodsky wrote: > > arch_{enter,leave}_lazy_mmu_mode() currently have a stateless API > > (taking and returning no value). This is proving problematic in > > situations where leave() needs to restore some context back to its > > original state (before enter() was called). In particular, this > > makes it difficult to support the nesting of lazy_mmu sections - > > leave() does not know whether the matching enter() call occurred > > while lazy_mmu was already enabled, and whether to disable it or > > not. > > > > This patch gives all architectures the chance to store local state > > while inside a lazy_mmu section by making enter() return some value, > > storing it in a local variable, and having leave() take that value. > > That value is typed lazy_mmu_state_t - each architecture defining > > __HAVE_ARCH_ENTER_LAZY_MMU_MODE is free to define it as it sees fit. > > For now we define it as int everywhere, which is sufficient to > > support nesting. ... > > { > > + lazy_mmu_state_t lazy_mmu_state; > > ... > > - arch_enter_lazy_mmu_mode(); > > + lazy_mmu_state = arch_enter_lazy_mmu_mode(); > > ... > > - arch_leave_lazy_mmu_mode(); > > + arch_leave_lazy_mmu_mode(lazy_mmu_state); > > ... > > } > > > > * In a few cases (e.g. xen_flush_lazy_mmu()), a function knows that > > lazy_mmu is already enabled, and it temporarily disables it by > > calling leave() and then enter() again. Here we want to ensure > > that any operation between the leave() and enter() calls is > > completed immediately; for that reason we pass LAZY_MMU_DEFAULT to > > leave() to fully disable lazy_mmu. enter() will then re-enable it > > - this achieves the expected behaviour, whether nesting occurred > > before that function was called or not. > > > > Note: it is difficult to provide a default definition of > > lazy_mmu_state_t for architectures implementing lazy_mmu, because > > that definition would need to be available in > > arch/x86/include/asm/paravirt_types.h and adding a new generic > > #include there is very tricky due to the existing header soup. > > Yeah, I was wondering about exactly that. > > In particular because LAZY_MMU_DEFAULT etc resides somewehere compeltely > different. > > Which raises the question: is using a new type really of any benefit here? > > Can't we just use an "enum lazy_mmu_state" and call it a day?
I could envision something completely different for this type on s390, e.g. a pointer to a per-cpu structure. So I would really ask to stick with the current approach. > -- > Cheers > > David / dhildenb Thanks!