linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: Kevin Brodsky <kevin.brodsky@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 S. Miller" <davem@davemloft.net>,
	"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>,
	Ryan Roberts <ryan.roberts@arm.com>,
	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 v3 06/13] mm: introduce generic lazy_mmu helpers
Date: Fri, 24 Oct 2025 15:27:32 +0200	[thread overview]
Message-ID: <f8d22ae0-4e36-4537-903f-28164c850fdb@redhat.com> (raw)
In-Reply-To: <390e41ae-4b66-40c1-935f-7a1794ba0b71@arm.com>

On 24.10.25 14:13, Kevin Brodsky wrote:
> On 23/10/2025 21:52, David Hildenbrand wrote:
>> On 15.10.25 10:27, Kevin Brodsky wrote:
>>> [...]
>>>
>>> * madvise_*_pte_range() call arch_leave() in multiple paths, some
>>>     followed by an immediate exit/rescheduling and some followed by a
>>>     conditional exit. These functions assume that they are called
>>>     with lazy MMU disabled and we cannot simply use pause()/resume()
>>>     to address that. This patch leaves the situation unchanged by
>>>     calling enable()/disable() in all cases.
>>
>> I'm confused, the function simply does
>>
>> (a) enables lazy mmu
>> (b) does something on the page table
>> (c) disables lazy mmu
>> (d) does something expensive (split folio -> take sleepable locks,
>>      flushes tlb)
>> (e) go to (a)
> 
> That step is conditional: we exit right away if pte_offset_map_lock()
> fails. The fundamental issue is that pause() must always be matched with
> resume(), but as those functions look today there is no situation where
> a pause() would always be matched with a resume().

We have matches enable/disable, so my question is rather "why" you are 
even thinking about using pause/resume?

What would be the benefit of that? If there is no benefit then just drop 
this from the patch description as it's more confusing than just ... 
doing what the existing code does :)

>>
>> Why would we use enable/disable instead?
>>
>>>
>>> * x86/Xen is currently the only case where explicit handling is
>>>     required for lazy MMU when context-switching. This is purely an
>>>     implementation detail and using the generic lazy_mmu_mode_*
>>>     functions would cause trouble when nesting support is introduced,
>>>     because the generic functions must be called from the current task.
>>>     For that reason we still use arch_leave() and arch_enter() there.
>>
>> How does this interact with patch #11?
> 
> It is a requirement for patch 11, in fact. If we called disable() when
> switching out a task, then lazy_mmu_state.enabled would (most likely) be
> false when scheduling it again.
> 
> By calling the arch_* helpers when context-switching, we ensure
> lazy_mmu_state remains unchanged. This is consistent with what happens
> on all other architectures (which don't do anything about lazy_mmu when
> context-switching). lazy_mmu_state is the lazy MMU status *when the task
> is scheduled*, and should be preserved on a context-switch.

Okay, thanks for clarifying. That whole XEN stuff here is rather horrible.

> 
>>
>>>
>>> Note: x86 calls arch_flush_lazy_mmu_mode() unconditionally in a few
>>> places, but only defines it if PARAVIRT_XXL is selected, and we are
>>> removing the fallback in <linux/pgtable.h>. Add a new fallback
>>> definition to <asm/pgtable.h> to keep things building.
>>
>> I can see a call in __kernel_map_pages() and
>> arch_kmap_local_post_map()/arch_kmap_local_post_unmap().
>>
>> I guess that is ... harmless/irrelevant in the context of this series?
> 
> It should be. arch_flush_lazy_mmu_mode() was only used by x86 before
> this series; we're adding new calls to it from the generic layer, but
> existing x86 calls shouldn't be affected.

Okay, I'd like to understand the rules when arch_flush_lazy_mmu_mode() 
would actually be required in such arch code, but that's outside of the 
scope of your patch series.


-- 
Cheers

David / dhildenb



  reply	other threads:[~2025-10-24 13:27 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-15  8:27 [PATCH v3 00/13] Nesting support for lazy MMU mode Kevin Brodsky
2025-10-15  8:27 ` [PATCH v3 01/13] powerpc/64s: Do not re-activate batched TLB flush Kevin Brodsky
2025-10-15  8:27 ` [PATCH v3 02/13] x86/xen: simplify flush_lazy_mmu() Kevin Brodsky
2025-10-15 16:52   ` Dave Hansen
2025-10-16  7:32     ` Kevin Brodsky
2025-10-15  8:27 ` [PATCH v3 03/13] powerpc/mm: implement arch_flush_lazy_mmu_mode() Kevin Brodsky
2025-10-23 19:36   ` David Hildenbrand
2025-10-24 12:09     ` Kevin Brodsky
2025-10-24 14:42       ` David Hildenbrand
2025-10-24 14:54         ` Kevin Brodsky
2025-10-15  8:27 ` [PATCH v3 04/13] sparc/mm: " Kevin Brodsky
2025-10-23 19:37   ` David Hildenbrand
2025-10-15  8:27 ` [PATCH v3 05/13] mm: introduce CONFIG_ARCH_LAZY_MMU Kevin Brodsky
2025-10-18  9:52   ` Mike Rapoport
2025-10-20 10:37     ` Kevin Brodsky
2025-10-23 19:38       ` David Hildenbrand
2025-10-15  8:27 ` [PATCH v3 06/13] mm: introduce generic lazy_mmu helpers Kevin Brodsky
2025-10-17 15:54   ` Alexander Gordeev
2025-10-20 10:32     ` Kevin Brodsky
2025-10-23 19:52   ` David Hildenbrand
2025-10-24 12:13     ` Kevin Brodsky
2025-10-24 13:27       ` David Hildenbrand [this message]
2025-10-24 14:32         ` Kevin Brodsky
2025-10-27 16:24           ` David Hildenbrand
2025-10-28 10:34             ` Kevin Brodsky
2025-10-15  8:27 ` [PATCH v3 07/13] mm: enable lazy_mmu sections to nest Kevin Brodsky
2025-10-23 20:00   ` David Hildenbrand
2025-10-24 12:16     ` Kevin Brodsky
2025-10-24 13:23       ` David Hildenbrand
2025-10-24 14:33         ` Kevin Brodsky
2025-10-15  8:27 ` [PATCH v3 08/13] arm64: mm: replace TIF_LAZY_MMU with in_lazy_mmu_mode() Kevin Brodsky
2025-10-15  8:27 ` [PATCH v3 09/13] powerpc/mm: replace batch->active " Kevin Brodsky
2025-10-23 20:02   ` David Hildenbrand
2025-10-24 12:16     ` Kevin Brodsky
2025-10-15  8:27 ` [PATCH v3 10/13] sparc/mm: " Kevin Brodsky
2025-10-23 20:03   ` David Hildenbrand
2025-10-15  8:27 ` [PATCH v3 11/13] x86/xen: use lazy_mmu_state when context-switching Kevin Brodsky
2025-10-23 20:06   ` David Hildenbrand
2025-10-24 14:47     ` David Woodhouse
2025-10-24 14:51       ` David Hildenbrand
2025-10-24 15:13         ` David Woodhouse
2025-10-24 15:16           ` David Hildenbrand
2025-10-24 15:38           ` John Paul Adrian Glaubitz
2025-10-24 15:47             ` David Hildenbrand
2025-10-24 15:51               ` John Paul Adrian Glaubitz
2025-10-27 12:38                 ` David Hildenbrand
2025-10-24 22:52         ` Demi Marie Obenour
2025-10-27 12:29           ` David Hildenbrand
2025-10-27 13:32             ` Kevin Brodsky
2025-10-24 15:05       ` Kevin Brodsky
2025-10-24 15:17         ` David Woodhouse
2025-10-27 13:38           ` Kevin Brodsky
2025-10-15  8:27 ` [PATCH v3 12/13] mm: bail out of lazy_mmu_mode_* in interrupt context Kevin Brodsky
2025-10-23 20:08   ` David Hildenbrand
2025-10-24 12:17     ` Kevin Brodsky
2025-10-15  8:27 ` [PATCH v3 13/13] mm: introduce arch_wants_lazy_mmu_mode() Kevin Brodsky
2025-10-23 20:10   ` David Hildenbrand
2025-10-24 12:17     ` 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=f8d22ae0-4e36-4537-903f-28164c850fdb@redhat.com \
    --to=david@redhat.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=hpa@zytor.com \
    --cc=jannh@google.com \
    --cc=jgross@suse.com \
    --cc=kevin.brodsky@arm.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