[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RFC PATCH v1 6/6] Revert "arm64/mm: Permit lazy_mmu_mode to be nested"



Commit 491344301b25 ("arm64/mm: Permit lazy_mmu_mode to be nested") made
the arm64 implementation of lazy_mmu_mode tolerant to nesting. But
subsequent commits have fixed the core code to ensure that lazy_mmu_mode
never gets nested (as originally intended). Therefore we can revert this
commit and reinstate the VM_WARN() if nesting is detected in future.

Signed-off-by: Ryan Roberts <ryan.roberts@xxxxxxx>
---
 arch/arm64/include/asm/pgtable.h | 14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index add75dee49f5..dcf0adbeb803 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -83,21 +83,11 @@ static inline void queue_pte_barriers(void)
 #define  __HAVE_ARCH_ENTER_LAZY_MMU_MODE
 static inline void arch_enter_lazy_mmu_mode(void)
 {
-       /*
-        * lazy_mmu_mode is not supposed to permit nesting. But in practice this
-        * does happen with CONFIG_DEBUG_PAGEALLOC, where a page allocation
-        * inside a lazy_mmu_mode section (such as zap_pte_range()) will change
-        * permissions on the linear map with apply_to_page_range(), which
-        * re-enters lazy_mmu_mode. So we tolerate nesting in our
-        * implementation. The first call to arch_leave_lazy_mmu_mode() will
-        * flush and clear the flag such that the remainder of the work in the
-        * outer nest behaves as if outside of lazy mmu mode. This is safe and
-        * keeps tracking simple.
-        */
-
        if (in_interrupt())
                return;
 
+       VM_WARN_ON(test_thread_flag(TIF_LAZY_MMU));
+
        set_thread_flag(TIF_LAZY_MMU);
 }
 
-- 
2.43.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.