From: Lorenzo Stoakes <ljs@kernel.org>
To: Dave Hansen <dave.hansen@linux.intel.com>
Cc: linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
linux-mm@kvack.org, Shakeel Butt <shakeel.butt@linux.dev>,
Suren Baghdasaryan <surenb@google.com>,
Vlastimil Babka <vbabka@kernel.org>
Subject: Re: [PATCH 0/6] mm: Make per-VMA locks available in all builds
Date: Fri, 8 May 2026 17:52:54 +0100 [thread overview]
Message-ID: <af4QC2It_jgSgCGd@lucifer> (raw)
In-Reply-To: <20260429181954.F50224AE@davehans-spike.ostc.intel.com>
I'm guessing this is kinda an RFC? :P
On Wed, Apr 29, 2026 at 11:19:54AM -0700, Dave Hansen wrote:
> tl;dr: I hope I'm not missing something big here. The basic
> observastion here is that forcing code to account for per-VMA lock
> failure adds a lot of complexity. This series theorizes that with a
> some Kconfig changes and a new helper, many callers can avoid writing
> code that falls back to mmap_lock.
In general very much in support of this!
It'd be great to just know that this is available and frankly I think it's a
critical part of the kernel.
Obviously Suren needs to have a look through, most important of all :)
>
> --
>
> When working on some x86 shadow stack code, it was a real pain to
> avoid causing recursive locking problems with mmap_lock. One way
> to avoid those was to avoid mmap_lock and use per-VMA locks instead.
> They are great, but they are not available in all configs which
> makes them unusable in generic code, or if you want to completely
> avoid mmap_lock.
Yeah, lock ordering is a pain.
>
> Make per-VMA locks available in all configs. Right now, they are
> only available on select architectures when SMP and MMU are enabled.
> But all of the primitives that per-VMA locks are built on (RCU, maple
> trees, refcounts) work just fine without SMP or MMU.
>
> Their only real downside is that they make VMAs a wee bit bigger
> on !MMU and !SMP builds.
>
> The upside is much cleaner code, lower complexity and less #ifdeffery.
>
> Building on top of universally-available per-VMA locks, introduce a
> new helper. Since the new API does not require callers to have a
> fallback to mmap_lock, it's much easier to use. Callers could
> potentially replace this very common kernel idiom:
>
> mmap_read_lock(mm);
> vma = vma_lookup()
> // fiddle with vma
> mmap_read_unlock(mm);
>
> with:
>
> vma = lock_vma_under_rcu_wait(mm, address);
I will look at what you're proposing but this seems a bit like something I
proposed at LSF (but was probably not the right solution for what was under
discussion).
Doing this 'right' would require quite a bit of engineering effort. The VMA
locks are pretty bloody complicated :) so we have to be careful not to spread
the complexity around too much.
But I guess you could 'wait' by doing it in the slow path and then using
vma_start_read_locked()...
Of course that'd not help you with any lock inversions though!
Anyway need to read the code :)
> // fiddle with vma
> vma_end_read(vma);
>
> Which avoids mmap_lock entirely in the fast path.
Yeah it's nice!
>
> Things I think needs more discussion:
> * The new helper has a horrible name. Suggestions are very welcome.
> * I'm not very confident that this approach completely avoids the
> deadlock issues that arise from touching userspace while holding
> mm-related locks.
Yeah we have to be careful...
> * Can the helper avoid the goto, maybe by taking the VMA refcount
> while holding mmap_lock?
Surely that'd defeat the purpose of VMA locks though? you'd hold the mmap lock
for less time but you're still contending vs. _any_ VMA write locks whilst
trying to get a VMA read lock?
Unless it's on a slow path... hmm :)
> * mm_struct and vm_area_struct "bloat"
Probably not a problem really. For any modern system you're using the fields.
>
> I've included a couple patches where I think the new helper really
> makes the code nicer.
>
> I'm keeping the cc list on the short side for now because I'm not
> actually proposing that we go ahead and do the ipv4 changes, for
> example.
Ack!
>
> Cc: Suren Baghdasaryan <surenb@google.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
> Cc: Lorenzo Stoakes <ljs@kernel.org>
> Cc: Vlastimil Babka <vbabka@kernel.org>
> Cc: Shakeel Butt <shakeel.butt@linux.dev>
> Cc: linux-mm@kvack.org
>
> arch/arm/Kconfig | 1
> arch/arm64/Kconfig | 1
> arch/loongarch/Kconfig | 1
> arch/powerpc/platforms/powernv/Kconfig | 1
> arch/powerpc/platforms/pseries/Kconfig | 1
> arch/riscv/Kconfig | 1
> arch/s390/Kconfig | 1
> arch/x86/Kconfig | 2 -
> arch/x86/kernel/shstk.c | 47 +++++++++++-------------------
> drivers/android/binder_alloc.c | 39 ++++++-------------------
> fs/proc/internal.h | 2 -
> fs/proc/task_mmu.c | 51 ---------------------------------
> include/linux/mm.h | 12 -------
> include/linux/mm_types.h | 7 ----
> include/linux/mmap_lock.h | 50 +-------------------------------
> kernel/fork.c | 2 -
> mm/Kconfig | 13 --------
> mm/mmap_lock.c | 45 +++++++++++++++++++++++++++--
> net/ipv4/tcp.c | 31 +++++---------------
> 19 files changed, 82 insertions(+), 226 deletions(-)
next prev parent reply other threads:[~2026-05-08 16:53 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20260429181954.F50224AE@davehans-spike.ostc.intel.com>
[not found] ` <20260429182005.00BF70D8@davehans-spike.ostc.intel.com>
2026-05-04 23:15 ` [PATCH 6/6] x86/mm: Avoid mmap lock for shadow stack pop fast path Edgecombe, Rick P
2026-05-05 16:39 ` Dave Hansen
2026-05-08 20:39 ` Lorenzo Stoakes
[not found] ` <20260429181955.0C443845@davehans-spike.ostc.intel.com>
2026-05-08 10:12 ` [PATCH 1/6] mm: Make per-VMA locks available universally David Hildenbrand (Arm)
2026-05-08 10:58 ` David Hildenbrand (Arm)
2026-05-08 16:55 ` Lorenzo Stoakes
2026-05-08 16:52 ` Lorenzo Stoakes [this message]
2026-05-08 17:01 ` [PATCH 0/6] mm: Make per-VMA locks available in all builds Dave Hansen
[not found] ` <20260429181957.7511C256@davehans-spike.ostc.intel.com>
2026-05-08 17:06 ` [PATCH 2/6] binder: Make shrinker rely solely on per-VMA lock Lorenzo Stoakes
[not found] ` <20260429181959.BC9DABC5@davehans-spike.ostc.intel.com>
2026-05-08 17:26 ` [PATCH 3/6] mm: Add RCU-based VMA lookup that waits for writers Lorenzo Stoakes
2026-05-08 20:15 ` Lorenzo Stoakes
[not found] ` <20260429182000.93887DFB@davehans-spike.ostc.intel.com>
2026-05-08 17:29 ` [PATCH 4/6] binder: Remove mmap_lock fallback Lorenzo Stoakes
[not found] ` <20260429182002.BB61C7BC@davehans-spike.ostc.intel.com>
2026-05-08 17:32 ` [PATCH 5/6] tcp: Remove mmap_lock fallback path Lorenzo Stoakes
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=af4QC2It_jgSgCGd@lucifer \
--to=ljs@kernel.org \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=dave.hansen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=shakeel.butt@linux.dev \
--cc=surenb@google.com \
--cc=vbabka@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox