Kernel KVM virtualization development
 help / color / mirror / Atom feed
* Re: [PATCH v3 03/26] mm: introduce AS_NO_DIRECT_MAP
       [not found] <CAO9r8zMxdg2BTFguwcRQn8n-2CPaEJJfg+T8dWcgO2eV4uNaHQ@mail.gmail.com>
@ 2026-10-13 15:25 ` Takahiro Itazuri
  2026-10-13 15:36   ` Yosry Ahmed
  0 siblings, 1 reply; 4+ messages in thread
From: Takahiro Itazuri @ 2026-10-13 15:25 UTC (permalink / raw)
  To: Yosry Ahmed
  Cc: Sean Christopherson, Brendan Jackman, Borislav Petkov,
	Dave Hansen, Peter Zijlstra, Andrew Morton, David Hildenbrand,
	Vlastimil Babka, Mike Rapoport, Wei Xu, Johannes Weiner, Zi Yan,
	Lorenzo Stoakes, linux-mm, linux-kernel, x86, Sumit Garg,
	Will Deacon, rientjes, Roy Patrick, Andy Lutomirski, David Kaplan,
	Thomas Gleixner, Patrick Bellasi, Reiji Watanabe, Nikita Kalyazin,
	Ackerley Tng, Takahiro Itazuri, cc-open-source, Kevin Brodsky,
	Gregory Price, kvm

On Thu, 3 Sep 2026 07:06:02 -0700, Yosry Ahmed <yosry@kernel.org> wrote:
> > If that work is not already underway,
> > I would like to respin the AS_NO_DIRECT_MAP introduction and secretmem
> > adoption as a standalone MM series, separate from ALLOC_UNMAPPED and
> > mermap.
[...]
> Perhaps wait until I send the new version, then we can discuss if we
> want to split it based on how the feedback looks like. Does this work
> for you?

Following up on this with an update. Yosry let me know off-list that
ALLOC_UNMAPPED is on hold for now (quoted with permission):

> I wanted to give you an update. I was working on v4 of the
> ALLOC_UNMAPPED series while our team was simultaneously working on
> integrating that design without internal ASI implementation.
> Unfortunately, there were multiple complications with that
> integration, and we will be holding off on sending new versions of the
> ALLOC_UNMAPPED series until we have higher confidence that this
> approach will meet ASI's requirements (ideally in a production
> experiment).

Since the integration with Google's internal ASI implementation needs
more time, Yosry also agreed that I pick up the AS_NO_DIRECT_MAP work
for guest_memfd, separate from ALLOC_UNMAPPED. Here is how I plan to
proceed. Feedback is very welcome, especially from Sean on section 2
below.

1. MM and KVM parts together

I'm withdrawing my earlier proposal to post AS_NO_DIRECT_MAP and the
secretmem conversion as a standalone MM series first. secretmem
removes kernel access to its memory entirely, but KVM still needs to
access some guest memory from the kernel. If the MM part lands first
and the guest_memfd integration then requires a different design, we
would have to rework it right after it lands. So I'd like to settle
the design with guest_memfd as a real user, and post the MM and KVM
parts together in a single series so that both sides can review the
whole picture. Once we agree on the overall design, I'm of course
happy to split it up so that each part can go through the MM and KVM
trees.

2. Kernel access to direct-map-removed memory

I agree with Sean [1] that the way to access such memory from the
kernel, whether it ends up as an extension of GUP or a new interface,
should be generic rather than specific to guest_memfd, so that other
users of direct-map-removed pages that may come along can use it too.
It is also still open who should establish the kernel mapping: MM
could do it transparently, or callers could create one explicitly on
demand, either with existing MM mechanisms or with a new one like the
mermap. I don't have a concrete design in mind yet.

As a first step towards that, I'd like to:

  - List the use cases that stop working when GUP rejects
    AS_NO_DIRECT_MAP mappings. On the KVM side, these are mainly the
    gfn_to_pfn_cache users (kvmclock and the Xen shared pages) and
    kvm_vcpu_map() (mostly nested VMX/SVM). Accesses through uaccess,
    such as kvm_read_guest(), are not affected.

  - Look into each use case and sort out its requirements, e.g.
    whether it needs only the PFN, a short-lived kernel mapping, or a
    kernel mapping that stays valid for as long as the vCPU or VM
    uses it.

and then work out an appropriate design based on those requirements.
I'd only consider supporting the use cases incrementally where that
doesn't leave guest_memfd with a list of caveats or an ad hoc
interface.

3. ALLOC_UNMAPPED and the mermap

AS_NO_DIRECT_MAP itself works without them, by zapping the direct map
of each folio. However, guest_memfd will eventually need a temporary
kernel mapping to populate guest memory via write() [2], because
folios are already unmapped once they are added to the page cache.
The cost of TLB flushes and direct map fragmentation also matters for
performance, so I'd like to keep discussing these with folks
upstream, building on the direct map fragmentation discussion that
Kevin led at LPC [3].

Thanks,
Takahiro

[1] https://lore.kernel.org/all/anZfv81jLSU2qY9G@google.com/
[2] https://lore.kernel.org/all/20251114151828.98165-1-kalyazin@amazon.com/
[3] https://lpc.events/event/20/contributions/2420/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 03/26] mm: introduce AS_NO_DIRECT_MAP
  2026-10-13 15:25 ` [PATCH v3 03/26] mm: introduce AS_NO_DIRECT_MAP Takahiro Itazuri
@ 2026-10-13 15:36   ` Yosry Ahmed
  2026-10-13 16:05     ` Takahiro Itazuri
  0 siblings, 1 reply; 4+ messages in thread
From: Yosry Ahmed @ 2026-10-13 15:36 UTC (permalink / raw)
  To: Takahiro Itazuri
  Cc: Sean Christopherson, Brendan Jackman, Borislav Petkov,
	Dave Hansen, Peter Zijlstra, Andrew Morton, David Hildenbrand,
	Vlastimil Babka, Mike Rapoport, Wei Xu, Johannes Weiner, Zi Yan,
	Lorenzo Stoakes, linux-mm, linux-kernel, x86, Sumit Garg,
	Will Deacon, rientjes, Roy Patrick, Andy Lutomirski, David Kaplan,
	Thomas Gleixner, Patrick Bellasi, Reiji Watanabe, Nikita Kalyazin,
	Ackerley Tng, Takahiro Itazuri, cc-open-source, Kevin Brodsky,
	Gregory Price, kvm

On Tue, Oct 13, 2026 at 8:26 AM Takahiro Itazuri <itazur@amazon.com> wrote:
>
> On Thu, 3 Sep 2026 07:06:02 -0700, Yosry Ahmed <yosry@kernel.org> wrote:
> > > If that work is not already underway,
> > > I would like to respin the AS_NO_DIRECT_MAP introduction and secretmem
> > > adoption as a standalone MM series, separate from ALLOC_UNMAPPED and
> > > mermap.
> [...]
> > Perhaps wait until I send the new version, then we can discuss if we
> > want to split it based on how the feedback looks like. Does this work
> > for you?
>
> Following up on this with an update. Yosry let me know off-list that
> ALLOC_UNMAPPED is on hold for now (quoted with permission):
>
> > I wanted to give you an update. I was working on v4 of the
> > ALLOC_UNMAPPED series while our team was simultaneously working on
> > integrating that design without internal ASI implementation.
> > Unfortunately, there were multiple complications with that
> > integration, and we will be holding off on sending new versions of the
> > ALLOC_UNMAPPED series until we have higher confidence that this
> > approach will meet ASI's requirements (ideally in a production
> > experiment).
>
> Since the integration with Google's internal ASI implementation needs
> more time, Yosry also agreed that I pick up the AS_NO_DIRECT_MAP work
> for guest_memfd, separate from ALLOC_UNMAPPED. Here is how I plan to
> proceed. Feedback is very welcome, especially from Sean on section 2
> below.

Thanks for the update, Takahrio!

> 3. ALLOC_UNMAPPED and the mermap
>
> AS_NO_DIRECT_MAP itself works without them, by zapping the direct map
> of each folio. However, guest_memfd will eventually need a temporary
> kernel mapping to populate guest memory via write() [2], because
> folios are already unmapped once they are added to the page cache.
> The cost of TLB flushes and direct map fragmentation also matters for
> performance, so I'd like to keep discussing these with folks
> upstream, building on the direct map fragmentation discussion that
> Kevin led at LPC [3].

FWIW, I think the mermap can still be used without ALLOC_UNMAPPED, and
I did have a newer version of the x86 patches repurposing the LDT area
for the mermap, and simplifying the mermap implementation a bit. I can
share them privately if you want to take a look.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 03/26] mm: introduce AS_NO_DIRECT_MAP
  2026-10-13 15:36   ` Yosry Ahmed
@ 2026-10-13 16:05     ` Takahiro Itazuri
  2026-10-13 16:09       ` Yosry Ahmed
  0 siblings, 1 reply; 4+ messages in thread
From: Takahiro Itazuri @ 2026-10-13 16:05 UTC (permalink / raw)
  To: Yosry Ahmed
  Cc: Sean Christopherson, Brendan Jackman, Borislav Petkov,
	Dave Hansen, Peter Zijlstra, Andrew Morton, David Hildenbrand,
	Vlastimil Babka, Mike Rapoport, Wei Xu, Johannes Weiner, Zi Yan,
	Lorenzo Stoakes, linux-mm, linux-kernel, x86, Sumit Garg,
	Will Deacon, rientjes, Roy Patrick, Andy Lutomirski, David Kaplan,
	Thomas Gleixner, Patrick Bellasi, Reiji Watanabe, Nikita Kalyazin,
	Ackerley Tng, Takahiro Itazuri, cc-open-source, Kevin Brodsky,
	Gregory Price, kvm, Derek Manwaring

On Tue, 13 Oct 2026 08:36:54 -0700, Yosry Ahmed <yosry@kernel.org> wrote:
> > 3. ALLOC_UNMAPPED and the mermap
> >
> > AS_NO_DIRECT_MAP itself works without them, by zapping the direct map
> > of each folio. However, guest_memfd will eventually need a temporary
> > kernel mapping to populate guest memory via write() [2], because
> > folios are already unmapped once they are added to the page cache.
[...]
>
> FWIW, I think the mermap can still be used without ALLOC_UNMAPPED, and
> I did have a newer version of the x86 patches repurposing the LDT area
> for the mermap, and simplifying the mermap implementation a bit. I can
> share them privately if you want to take a look.

Yes please, that would be very helpful. Thanks!

Agreed that the mermap can be used without ALLOC_UNMAPPED. To give a
bit more context from the guest_memfd side: I can't say anything
definite until I've gone through the use cases, but as far as I can
see now, guest_memfd needs the mermap only for write() support.
write() is an optimization for populating guest memory (e.g. when
restoring a snapshot) and isn't functionally required, because
userspace can also populate guest memory through its own mapping of
guest_memfd. So I currently plan to keep write() support, and with it
the mermap, out of the guest_memfd direct map removal series itself.
Since ALLOC_UNMAPPED is the main user of the mermap, it may make more
sense for the two to land together later.

One thing I'd like to look into is arm64. Firecracker also runs on
arm64, so write() needs to work there too, but the mermap currently
relies on the x86 mm-local region, and it sounds like your newer
version relies on the LDT area. Kevin, do you happen to have any
ideas on how something similar could be done on arm64?

Thanks,
Takahiro

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 03/26] mm: introduce AS_NO_DIRECT_MAP
  2026-10-13 16:05     ` Takahiro Itazuri
@ 2026-10-13 16:09       ` Yosry Ahmed
  0 siblings, 0 replies; 4+ messages in thread
From: Yosry Ahmed @ 2026-10-13 16:09 UTC (permalink / raw)
  To: Takahiro Itazuri
  Cc: Sean Christopherson, Brendan Jackman, Borislav Petkov,
	Dave Hansen, Peter Zijlstra, Andrew Morton, David Hildenbrand,
	Vlastimil Babka, Mike Rapoport, Wei Xu, Johannes Weiner, Zi Yan,
	Lorenzo Stoakes, linux-mm, linux-kernel, x86, Sumit Garg,
	Will Deacon, rientjes, Roy Patrick, Andy Lutomirski, David Kaplan,
	Thomas Gleixner, Patrick Bellasi, Reiji Watanabe, Nikita Kalyazin,
	Ackerley Tng, Takahiro Itazuri, cc-open-source, Kevin Brodsky,
	Gregory Price, kvm, Derek Manwaring

On Tue, Oct 13, 2026 at 9:06 AM Takahiro Itazuri <itazur@amazon.com> wrote:
>
> On Tue, 13 Oct 2026 08:36:54 -0700, Yosry Ahmed <yosry@kernel.org> wrote:
> > > 3. ALLOC_UNMAPPED and the mermap
> > >
> > > AS_NO_DIRECT_MAP itself works without them, by zapping the direct map
> > > of each folio. However, guest_memfd will eventually need a temporary
> > > kernel mapping to populate guest memory via write() [2], because
> > > folios are already unmapped once they are added to the page cache.
> [...]
> >
> > FWIW, I think the mermap can still be used without ALLOC_UNMAPPED, and
> > I did have a newer version of the x86 patches repurposing the LDT area
> > for the mermap, and simplifying the mermap implementation a bit. I can
> > share them privately if you want to take a look.
>
> Yes please, that would be very helpful. Thanks!
>
> Agreed that the mermap can be used without ALLOC_UNMAPPED. To give a
> bit more context from the guest_memfd side: I can't say anything
> definite until I've gone through the use cases, but as far as I can
> see now, guest_memfd needs the mermap only for write() support.
> write() is an optimization for populating guest memory (e.g. when
> restoring a snapshot) and isn't functionally required, because
> userspace can also populate guest memory through its own mapping of
> guest_memfd. So I currently plan to keep write() support, and with it
> the mermap, out of the guest_memfd direct map removal series itself.
> Since ALLOC_UNMAPPED is the main user of the mermap, it may make more
> sense for the two to land together later.
>
> One thing I'd like to look into is arm64. Firecracker also runs on
> arm64, so write() needs to work there too, but the mermap currently
> relies on the x86 mm-local region, and it sounds like your newer
> version relies on the LDT area. Kevin, do you happen to have any
> ideas on how something similar could be done on arm64?

Small correction: Brendan's version already reworked the LDT area, I
just reshuffled things and simplified the implementation.

>
> Thanks,
> Takahiro

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-10-13 16:09 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <CAO9r8zMxdg2BTFguwcRQn8n-2CPaEJJfg+T8dWcgO2eV4uNaHQ@mail.gmail.com>
2026-10-13 15:25 ` [PATCH v3 03/26] mm: introduce AS_NO_DIRECT_MAP Takahiro Itazuri
2026-10-13 15:36   ` Yosry Ahmed
2026-10-13 16:05     ` Takahiro Itazuri
2026-10-13 16:09       ` Yosry Ahmed

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox