arch_flush_lazy_mmu_mode() is called when outstanding batched pgtable operations must be completed immediately. There should however be no need to leave and re-enter lazy MMU completely. The only part of that sequence that we really need is xen_mc_flush(); call it directly.
While at it, we can also avoid preempt_disable() if we are not in lazy MMU mode - xen_get_lazy_mode() should tolerate preemption. Signed-off-by: Kevin Brodsky <[email protected]> --- arch/x86/xen/mmu_pv.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index 2a4a8deaf612..dcb7b0989c32 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c @@ -2137,14 +2137,11 @@ static void xen_enter_lazy_mmu(void) static void xen_flush_lazy_mmu(void) { - preempt_disable(); - if (xen_get_lazy_mode() == XEN_LAZY_MMU) { - arch_leave_lazy_mmu_mode(); - arch_enter_lazy_mmu_mode(); + preempt_disable(); + xen_mc_flush(); + preempt_enable(); } - - preempt_enable(); } static void __init xen_post_allocator_init(void) -- 2.47.0
