Thread (58 messages) 58 messages, 8 authors, 2025-10-28

Re: [PATCH v3 12/13] mm: bail out of lazy_mmu_mode_* in interrupt context

From: David Hildenbrand <hidden>
Date: 2025-10-23 20:08:49
Also in: linux-arm-kernel, linux-mm, lkml, sparclinux, xen-devel

On 15.10.25 10:27, Kevin Brodsky wrote:
quoted hunk ↗ jump to hunk
The lazy MMU mode cannot be used in interrupt context. This is
documented in <linux/pgtable.h>, but isn't consistently handled
across architectures.

arm64 ensures that calls to lazy_mmu_mode_* have no effect in
interrupt context, because such calls do occur in certain
configurations - see commit b81c688426a9 ("arm64/mm: Disable barrier
batching in interrupt contexts"). Other architectures do not check
this situation, most likely because it hasn't occurred so far.

Both arm64 and x86/Xen also ensure that any lazy MMU optimisation is
disabled while in interrupt mode (see queue_pte_barriers() and
xen_get_lazy_mode() respectively).

Let's handle this in the new generic lazy_mmu layer, in the same
fashion as arm64: bail out of lazy_mmu_mode_* if in_interrupt(), and
have in_lazy_mmu_mode() return false to disable any optimisation.
Also remove the arm64 handling that is now redundant; x86/Xen has
its own internal tracking so it is left unchanged.

Signed-off-by: Kevin Brodsky <redacted>
---
  arch/arm64/include/asm/pgtable.h | 17 +----------------
  include/linux/pgtable.h          | 16 ++++++++++++++--
  include/linux/sched.h            |  3 +++
  3 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index 944e512767db..a37f417c30be 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -62,37 +62,22 @@ static inline void emit_pte_barriers(void)
  
  static inline void queue_pte_barriers(void)
  {
-	if (in_interrupt()) {
-		emit_pte_barriers();
-		return;
-	}
-
That took me a while. I guess this works because in_lazy_mmu_mode() == 0 
in interrupt context, so we keep calling emit_pte_barriers?


-- 
Cheers

David / dhildenb

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help