From: Kevin Brodsky <kevin.brodsky@arm.com>
To: Ryan Roberts <ryan.roberts@arm.com>, linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org,
Alexander Gordeev <agordeev@linux.ibm.com>,
Andreas Larsson <andreas@gaisler.com>,
Andrew Morton <akpm@linux-foundation.org>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Borislav Petkov <bp@alien8.de>,
Catalin Marinas <catalin.marinas@arm.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Dave Hansen <dave.hansen@linux.intel.com>,
David Hildenbrand <david@redhat.com>,
"David S. Miller" <davem@davemloft.net>,
David Woodhouse <dwmw2@infradead.org>,
"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@redhat.com>,
Jann Horn <jannh@google.com>, Juergen Gross <jgross@suse.com>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
Madhavan Srinivasan <maddy@linux.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Michal Hocko <mhocko@suse.com>, Mike Rapoport <rppt@kernel.org>,
Nicholas Piggin <npiggin@gmail.com>,
Peter Zijlstra <peterz@infradead.org>,
Suren Baghdasaryan <surenb@google.com>,
Thomas Gleixner <tglx@linutronix.de>,
Vlastimil Babka <vbabka@suse.cz>, Will Deacon <will@kernel.org>,
Yeoreum Yun <yeoreum.yun@arm.com>,
linux-arm-kernel@lists.infradead.org,
linuxppc-dev@lists.ozlabs.org, sparclinux@vger.kernel.org,
xen-devel@lists.xenproject.org, x86@kernel.org
Subject: Re: [PATCH v4 06/12] mm: introduce generic lazy_mmu helpers
Date: Mon, 10 Nov 2025 11:45:00 +0100 [thread overview]
Message-ID: <b44825dd-aef9-4d3e-91fd-a44122264c23@arm.com> (raw)
In-Reply-To: <71418b31-aedb-4600-9558-842515dd6c44@arm.com>
On 07/11/2025 14:26, Ryan Roberts wrote:
> On 29/10/2025 10:09, Kevin Brodsky wrote:
>> [...]
>>
>> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
>> index b8d37eb037fc..d9c8e94f140f 100644
>> --- a/arch/arm64/mm/mmu.c
>> +++ b/arch/arm64/mm/mmu.c
>> @@ -731,7 +731,7 @@ int split_kernel_leaf_mapping(unsigned long start, unsigned long end)
>> return -EINVAL;
>>
>> mutex_lock(&pgtable_split_lock);
>> - arch_enter_lazy_mmu_mode();
>> + lazy_mmu_mode_enable();
>>
>> /*
>> * The split_kernel_leaf_mapping_locked() may sleep, it is not a
> This is a bit unfortunate, IMHO. The rest of this comment explains that although
> you're not supposed to sleep inside lazy mmu mode, it's fine for arm64's
> implementation. But we are no longer calling arm64's implementation; we are
> calling a generic function, which does who knows what.
>
> I think it all still works, but we are no longer containing our assumptions in
> arm64 code. We are relying on implementation details of generic code.
I see your point. The change itself is still correct (and required
considering patch 8), but maybe the documentation of the generic
interface should be clarified to guarantee that the generic layer can
itself cope with sleeping - without any guarantee regarding the
behaviour of arch_*_lazy_mmu_mode.
>> [...]
>>
>> diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
>> index e33df3da6980..14fd672bc9b2 100644
>> --- a/arch/x86/include/asm/pgtable.h
>> +++ b/arch/x86/include/asm/pgtable.h
>> @@ -117,7 +117,8 @@ extern pmdval_t early_pmd_flags;
>> #define pte_val(x) native_pte_val(x)
>> #define __pte(x) native_make_pte(x)
>>
>> -#define arch_end_context_switch(prev) do {} while(0)
>> +#define arch_end_context_switch(prev) do {} while (0)
>> +#define arch_flush_lazy_mmu_mode() do {} while (0)
> Andrew converted over the default version of this (which you have removed with
> this commit) to be static inline instead of the do/while guff. Perhaps you
> should try to preserve that improvement here?
>
> See Commit d02ac836e4d6 ("include/linux/pgtable.h: convert
> arch_enter_lazy_mmu_mode() and friends to static inlines")
Good point, I suppose I could also convert arch_end_context_switch()
while at it.
>> #endif /* CONFIG_PARAVIRT_XXL */
>>
>> static inline pmd_t pmd_set_flags(pmd_t pmd, pmdval_t set)
>> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
>> index fc35a0543f01..d16ba1d32169 100644
>> --- a/fs/proc/task_mmu.c
>> +++ b/fs/proc/task_mmu.c
>> @@ -2703,7 +2703,7 @@ static int pagemap_scan_pmd_entry(pmd_t *pmd, unsigned long start,
>> return 0;
>> }
>>
>> - arch_enter_lazy_mmu_mode();
>> + lazy_mmu_mode_enable();
>>
>> if ((p->arg.flags & PM_SCAN_WP_MATCHING) && !p->vec_out) {
>> /* Fast path for performing exclusive WP */
>> @@ -2773,7 +2773,7 @@ static int pagemap_scan_pmd_entry(pmd_t *pmd, unsigned long start,
>> if (flush_end)
>> flush_tlb_range(vma, start, addr);
>>
>> - arch_leave_lazy_mmu_mode();
>> + lazy_mmu_mode_disable();
>> pte_unmap_unlock(start_pte, ptl);
>>
>> cond_resched();
>> diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
>> index 9894366e768b..b5fdf32c437f 100644
>> --- a/include/linux/pgtable.h
>> +++ b/include/linux/pgtable.h
>> @@ -231,10 +231,31 @@ static inline int pmd_dirty(pmd_t pmd)
>> * held, but for kernel PTE updates, no lock is held). Nesting is not permitted
>> * and the mode cannot be used in interrupt context.
>> */
>> -#ifndef CONFIG_ARCH_HAS_LAZY_MMU_MODE
>> -static inline void arch_enter_lazy_mmu_mode(void) {}
>> -static inline void arch_leave_lazy_mmu_mode(void) {}
>> -static inline void arch_flush_lazy_mmu_mode(void) {}
>> +#ifdef CONFIG_ARCH_HAS_LAZY_MMU_MODE
>> +static inline void lazy_mmu_mode_enable(void)
>> +{
>> + arch_enter_lazy_mmu_mode();
>> +}
>> +
>> +static inline void lazy_mmu_mode_disable(void)
>> +{
>> + arch_leave_lazy_mmu_mode();
>> +}
>> +
>> +static inline void lazy_mmu_mode_pause(void)
>> +{
>> + arch_leave_lazy_mmu_mode();
>> +}
>> +
>> +static inline void lazy_mmu_mode_resume(void)
>> +{
>> + arch_enter_lazy_mmu_mode();
>> +}
> It would be good to add documentation blocks for each of these.
I considered it, but then realised that these functions are much better
explained together (see comment added above in patch 7). Maybe a short
description for each that refers to the big comment above? That wouldn't
work well for the generated kernel-doc though...
- Kevin
next prev parent reply other threads:[~2025-11-10 10:45 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-29 10:08 [PATCH v4 00/12] Nesting support for lazy MMU mode Kevin Brodsky
2025-10-29 10:08 ` [PATCH v4 01/12] powerpc/64s: Do not re-activate batched TLB flush Kevin Brodsky
2025-11-01 12:05 ` David Hildenbrand
2025-11-05 2:46 ` Ritesh Harjani
2025-11-06 10:29 ` Kevin Brodsky
2025-11-08 0:35 ` Ritesh Harjani
2025-11-10 13:18 ` Kevin Brodsky
2025-11-07 12:25 ` Ryan Roberts
2025-11-07 12:28 ` Ryan Roberts
2025-10-29 10:08 ` [PATCH v4 02/12] x86/xen: simplify flush_lazy_mmu() Kevin Brodsky
2025-11-01 12:14 ` David Hildenbrand
2025-11-03 18:06 ` Kevin Brodsky
2025-11-07 12:31 ` Ryan Roberts
2025-11-10 10:36 ` Kevin Brodsky
2025-11-11 10:08 ` Ryan Roberts
2025-11-07 15:45 ` Jürgen Groß
2025-10-29 10:09 ` [PATCH v4 03/12] powerpc/mm: implement arch_flush_lazy_mmu_mode() Kevin Brodsky
2025-11-01 12:14 ` David Hildenbrand
2025-11-05 3:15 ` Ritesh Harjani
2025-11-05 9:49 ` Ritesh Harjani
2025-11-06 10:31 ` Kevin Brodsky
2025-10-29 10:09 ` [PATCH v4 04/12] sparc/mm: " Kevin Brodsky
2025-11-01 12:14 ` David Hildenbrand
2025-10-29 10:09 ` [PATCH v4 05/12] mm: introduce CONFIG_ARCH_HAS_LAZY_MMU_MODE Kevin Brodsky
2025-11-01 12:16 ` David Hildenbrand
2025-11-05 4:40 ` Ritesh Harjani
2025-11-06 10:33 ` Kevin Brodsky
2025-11-07 13:56 ` Ryan Roberts
2025-11-10 10:37 ` Kevin Brodsky
2025-10-29 10:09 ` [PATCH v4 06/12] mm: introduce generic lazy_mmu helpers Kevin Brodsky
2025-11-01 12:18 ` David Hildenbrand
2025-11-07 14:26 ` Ryan Roberts
2025-11-07 14:34 ` David Hildenbrand (Red Hat)
2025-11-07 15:22 ` Ryan Roberts
2025-11-10 8:11 ` Alexander Gordeev
2025-11-10 9:19 ` Ryan Roberts
2025-11-11 8:01 ` Alexander Gordeev
2025-11-11 12:16 ` Ryan Roberts
2025-11-10 10:45 ` Kevin Brodsky [this message]
2025-11-24 12:47 ` Kevin Brodsky
2025-11-24 14:36 ` Ryan Roberts
2025-10-29 10:09 ` [PATCH v4 07/12] mm: enable lazy_mmu sections to nest Kevin Brodsky
2025-10-29 16:41 ` Alexander Gordeev
2025-10-30 10:28 ` Kevin Brodsky
2025-10-30 16:34 ` Alexander Gordeev
2025-11-01 12:22 ` David Hildenbrand
2025-11-03 18:08 ` Kevin Brodsky
2025-11-05 8:49 ` Ritesh Harjani
2025-11-05 16:12 ` Alexander Gordeev
2025-11-06 10:51 ` Kevin Brodsky
2025-11-06 15:33 ` Alexander Gordeev
2025-11-07 10:16 ` Kevin Brodsky
2025-11-06 16:32 ` Ritesh Harjani
2025-11-06 17:01 ` Ritesh Harjani
2025-11-07 11:13 ` Kevin Brodsky
2025-11-07 14:59 ` Ryan Roberts
2025-11-10 10:47 ` Kevin Brodsky
2025-11-11 10:24 ` Ryan Roberts
2025-11-11 15:56 ` Kevin Brodsky
2025-11-11 17:03 ` Ryan Roberts
2025-11-12 10:42 ` Kevin Brodsky
2025-11-12 13:57 ` David Hildenbrand (Red Hat)
2025-10-29 10:09 ` [PATCH v4 08/12] arm64: mm: replace TIF_LAZY_MMU with in_lazy_mmu_mode() Kevin Brodsky
2025-11-03 16:03 ` David Hildenbrand
2025-11-03 18:25 ` Kevin Brodsky
2025-11-07 15:28 ` Ryan Roberts
2025-10-29 10:09 ` [PATCH v4 09/12] powerpc/mm: replace batch->active " Kevin Brodsky
2025-11-03 16:05 ` David Hildenbrand
2025-11-04 11:33 ` Kevin Brodsky
2025-11-05 9:40 ` Ritesh Harjani
2025-10-29 10:09 ` [PATCH v4 10/12] sparc/mm: " Kevin Brodsky
2025-11-03 16:11 ` David Hildenbrand (Red Hat)
2025-10-29 10:09 ` [PATCH v4 11/12] x86/xen: use lazy_mmu_state when context-switching Kevin Brodsky
2025-11-03 16:15 ` David Hildenbrand (Red Hat)
2025-11-03 18:29 ` Kevin Brodsky
2025-11-03 19:23 ` David Hildenbrand (Red Hat)
2025-11-04 11:28 ` Kevin Brodsky
2025-10-29 10:09 ` [PATCH v4 12/12] mm: bail out of lazy_mmu_mode_* in interrupt context Kevin Brodsky
2025-11-07 15:42 ` Ryan Roberts
2025-11-10 10:48 ` Kevin Brodsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b44825dd-aef9-4d3e-91fd-a44122264c23@arm.com \
--to=kevin.brodsky@arm.com \
--cc=Liam.Howlett@oracle.com \
--cc=agordeev@linux.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=andreas@gaisler.com \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=christophe.leroy@csgroup.eu \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=david@redhat.com \
--cc=dwmw2@infradead.org \
--cc=hpa@zytor.com \
--cc=jannh@google.com \
--cc=jgross@suse.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=maddy@linux.ibm.com \
--cc=mhocko@suse.com \
--cc=mingo@redhat.com \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
--cc=peterz@infradead.org \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=sparclinux@vger.kernel.org \
--cc=surenb@google.com \
--cc=tglx@linutronix.de \
--cc=vbabka@suse.cz \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.org \
--cc=yeoreum.yun@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox