From: "Vlastimil Babka (SUSE)" <vbabka@kernel.org>
To: Suren Baghdasaryan <surenb@google.com>, akpm@linux-foundation.org
Cc: dave.hansen@linux.intel.com, Liam.Howlett@oracle.com,
ljs@kernel.org, david@redhat.com, willy@infradead.org,
shakeel.butt@linux.dev, jannh@google.com, aliceryhl@google.com,
arve@android.com, cmllamas@google.com, christian@brauner.io,
tkjos@android.com, dsahern@kernel.org, davem@davemloft.net,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, netdev@vger.kernel.org
Subject: Re: [PATCH v3 1/5] mm: Make per-VMA locks available universally
Date: Mon, 3 Aug 2026 16:01:34 +0200 [thread overview]
Message-ID: <d01d461b-6af0-4ac6-8e5f-c7c4dfe6234d@kernel.org> (raw)
In-Reply-To: <20260802215459.2769283-2-surenb@google.com>
On 8/2/26 23:54, Suren Baghdasaryan wrote:
> From: Dave Hansen <dave.hansen@linux.intel.com>
>
> The per-VMA locks have been around for several years. They've had some
> bugs worked out of them and have seen quite wide use. However, they
> are still only available when architectures explicitly enable them.
> Remove the conditional compilation around the per-VMA locks, making
> them available on all architectures and configs.
>
> The approach up to now seemed to be to add ARCH_SUPPORTS_PER_VMA_LOCK
> when the architecture started using per-VMA locks in the fault
> handler. But, contrary to the naming, the Kconfig option does not
> really indicate whether the architecture supports per-VMA locks or
> not. It is more of a marker for whether the architecture is likely to
> benefit from per-VMA locks.
>
> To me, the most important thing side-effect of universal availability
> is letting per-VMA locks be used in SMP=n configs. This lets us use
> per-VMA locking in all x86 code without fallbacks.
>
> Overall, this just generally makes the kernel simpler. Just look at
> the diffstat. It also opens the door to users that want to use the
> per-VMA locks in common code. Doing *that* brings additional
> simplifications.
>
> The downside of this is adding some fields to vm_area_struct and
> mm_struct. There are likely ways to optimize this, especially for
> things like SMP=n configs. For now, do the simplest thing: use the
> same implementation everywhere.
>
> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
> Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Reviewed-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
Nits:
> diff --git a/mm/Kconfig b/mm/Kconfig
> index 060190e12bce..77103b46b679 100644
> --- a/mm/Kconfig
> +++ b/mm/Kconfig
> @@ -1425,19 +1425,6 @@ config LRU_GEN_STATS
> config LRU_GEN_WALKS_MMU
> def_bool y
> depends on LRU_GEN && ARCH_HAS_HW_PTE_YOUNG
> -# }
I think either leave this in place, or remove the line above with "#
multi-gen LRU {" as well?
> -
> -config ARCH_SUPPORTS_PER_VMA_LOCK
> - def_bool n
> -
> -config PER_VMA_LOCK
> - def_bool y
> - depends on ARCH_SUPPORTS_PER_VMA_LOCK && MMU && SMP
> - help
> - Allow per-vma locking during page fault handling.
> -
> - This feature allows locking each virtual memory area separately when
> - handling page faults instead of taking mmap_lock.
>
> config LOCK_MM_AND_FIND_VMA
> bool
...
> diff --git a/rust/kernel/mm.rs b/rust/kernel/mm.rs
> index 4764d7b68f2a..2633e704c83d 100644
> --- a/rust/kernel/mm.rs
> +++ b/rust/kernel/mm.rs
> @@ -174,26 +174,20 @@ pub unsafe fn from_raw<'a>(ptr: *const bindings::mm_struct) -> &'a MmWithUser {
> /// When per-vma locks are disabled, this always returns `None`.
> #[inline]
> pub fn lock_vma_under_rcu(&self, vma_addr: usize) -> Option<VmaReadGuard<'_>> {
> - #[cfg(CONFIG_PER_VMA_LOCK)]
> {
> // SAFETY: Calling `bindings::lock_vma_under_rcu` is always okay given an mm where
> // `mm_users` is non-zero.
> let vma = unsafe { bindings::lock_vma_under_rcu(self.as_raw(), vma_addr) };
> - if !vma.is_null() {
> - return Some(VmaReadGuard {
> - // SAFETY: If `lock_vma_under_rcu` returns a non-null ptr, then it points at a
> - // valid vma. The vma is stable for as long as the vma read lock is held.
> - vma: unsafe { VmaRef::from_raw(vma) },
> - _nts: NotThreadSafe,
> - });
> + if vma.is_null() {
> + return None;
> }
> + Some(VmaReadGuard {
> + // SAFETY: If `lock_vma_under_rcu` returns a non-null ptr, then it points at a
> + // valid vma. The vma is stable for as long as the vma read lock is held.
> + vma: unsafe { VmaRef::from_raw(vma) },
> + _nts: NotThreadSafe,
> + })
> }
With the "#[cfg(CONFIG_PER_VMA_LOCK)]" does this still need to be in a { }
block?
> -
> - // Silence warnings about unused variables.
> - #[cfg(not(CONFIG_PER_VMA_LOCK))]
> - let _ = vma_addr;
> -
> - None
> }
>
> /// Lock the mmap read lock.
next prev parent reply other threads:[~2026-08-03 14:01 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-02 21:54 [PATCH v3 0/5] mm: Unconditional per-VMA locks and cleanups Suren Baghdasaryan
2026-08-02 21:54 ` [PATCH v3 1/5] mm: Make per-VMA locks available universally Suren Baghdasaryan
2026-08-03 10:49 ` Lorenzo Stoakes (ARM)
2026-08-03 14:01 ` Vlastimil Babka (SUSE) [this message]
2026-08-03 17:45 ` Suren Baghdasaryan
2026-08-03 15:24 ` Suren Baghdasaryan
2026-08-03 16:08 ` Lorenzo Stoakes (ARM)
2026-08-03 17:41 ` Suren Baghdasaryan
2026-08-03 17:45 ` Suren Baghdasaryan
2026-08-03 21:12 ` Jann Horn
2026-08-04 8:56 ` Lorenzo Stoakes (ARM)
2026-08-04 14:59 ` Suren Baghdasaryan
2026-08-03 19:33 ` Jann Horn
2026-08-03 19:43 ` Suren Baghdasaryan
2026-08-02 21:54 ` [PATCH v3 2/5] binder: Make shrinker rely solely on per-VMA lock Suren Baghdasaryan
2026-08-03 9:48 ` Alice Ryhl
2026-08-03 10:50 ` Lorenzo Stoakes (ARM)
2026-08-03 11:11 ` Lorenzo Stoakes (ARM)
2026-08-03 11:33 ` Lorenzo Stoakes (ARM)
2026-08-03 18:02 ` Suren Baghdasaryan
2026-08-04 9:15 ` Lorenzo Stoakes (ARM)
2026-08-03 11:10 ` Lorenzo Stoakes (ARM)
2026-08-03 18:31 ` Suren Baghdasaryan
2026-08-04 9:08 ` Lorenzo Stoakes (ARM)
2026-08-04 9:04 ` Alice Ryhl
2026-08-04 9:11 ` Lorenzo Stoakes (ARM)
2026-08-04 14:54 ` Suren Baghdasaryan
2026-08-02 21:54 ` [PATCH v3 3/5] mm: Add RCU-based VMA lookup helper that waits for writers Suren Baghdasaryan
2026-08-03 11:28 ` Lorenzo Stoakes (ARM)
2026-08-03 19:01 ` Suren Baghdasaryan
2026-08-04 8:47 ` Lorenzo Stoakes (ARM)
2026-08-04 15:00 ` Suren Baghdasaryan
2026-08-03 14:55 ` Vlastimil Babka (SUSE)
2026-08-03 15:00 ` Lorenzo Stoakes (ARM)
2026-08-03 16:24 ` Vlastimil Babka (SUSE)
2026-08-03 16:43 ` Lorenzo Stoakes (ARM)
2026-08-03 19:13 ` Suren Baghdasaryan
2026-08-04 7:59 ` Vlastimil Babka (SUSE)
2026-08-04 8:44 ` Lorenzo Stoakes (ARM)
2026-08-02 21:54 ` [PATCH v3 4/5] binder: Remove mmap_lock fallback Suren Baghdasaryan
2026-08-03 10:34 ` Alice Ryhl
2026-08-03 19:14 ` Suren Baghdasaryan
2026-08-03 11:33 ` Lorenzo Stoakes (ARM)
2026-08-03 19:16 ` Suren Baghdasaryan
2026-08-02 21:54 ` [PATCH v3 5/5] tcp: Remove mmap_lock fallback path Suren Baghdasaryan
2026-08-03 2:11 ` [PATCH v3 0/5] mm: Unconditional per-VMA locks and cleanups Barry Song
2026-08-03 17:51 ` Suren Baghdasaryan
2026-08-04 9:27 ` Lorenzo Stoakes (ARM)
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=d01d461b-6af0-4ac6-8e5f-c7c4dfe6234d@kernel.org \
--to=vbabka@kernel.org \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=aliceryhl@google.com \
--cc=arve@android.com \
--cc=christian@brauner.io \
--cc=cmllamas@google.com \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=david@redhat.com \
--cc=dsahern@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=jannh@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=shakeel.butt@linux.dev \
--cc=surenb@google.com \
--cc=tkjos@android.com \
--cc=willy@infradead.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.