[PATCH v6] mm: retry page faults once under the per-VMA lock
Matthew Wilcox
willy at infradead.org
Sun Sep 27 15:55:01 PDT 2026
On Tue, Sep 22, 2026 at 09:55:23AM +0100, Lorenzo Stoakes (ARM) wrote:
> On Mon, Sep 21, 2026 at 07:57:23PM +0100, Matthew Wilcox wrote:
> > more to say on this in two weeks at Plumbers.
>
> I look forward to it :)
So while doing my slides, I realised that what we need to avoid doing
is (a) sleeping while holding the mmap_lock (b) returning RETRY while
holding the VMA lock
And that turns out to be as simple as this patch:
diff --git a/include/linux/mm.h b/include/linux/mm.h
index dd09c438fa23..94ed2333f8d8 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -723,6 +723,8 @@ enum {
*/
static inline bool fault_flag_allow_retry_first(enum fault_flag flags)
{
+ if (flags & FAULT_FLAG_VMA_LOCK)
+ return false;
return (flags & FAULT_FLAG_ALLOW_RETRY) &&
(!(flags & FAULT_FLAG_TRIED));
}
OK, this is a hack. The function is spectacularly badly named, and
needs to be renamed before a patch can go upstream. But this should
fix the contention on mmap_lock.
Could somebody try it? I've verified it boots and runs some userspace
fine, but I don't have the workload to test the contention.
More information about the linux-riscv
mailing list