Linux-mm Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Yosry Ahmed <yosry@kernel.org>
Cc: Brendan Jackman <brendan.jackman@linux.dev>,
	Brendan Jackman <jackmanb@google.com>,
	 Borislav Petkov <bp@alien8.de>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	 Peter Zijlstra <peterz@infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	 David Hildenbrand <david@kernel.org>,
	Vlastimil Babka <vbabka@kernel.org>,
	Mike Rapoport <rppt@kernel.org>,  Wei Xu <weixugc@google.com>,
	Johannes Weiner <hannes@cmpxchg.org>, Zi Yan <ziy@nvidia.com>,
	 Lorenzo Stoakes <ljs@kernel.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	 x86@kernel.org, Sumit Garg <sumit.garg@oss.qualcomm.com>,
	Will Deacon <will@kernel.org>,
	 rientjes@google.com, patrick.roy@linux.dev,
	 Takahiro Itazuri <itazur@amazon.co.uk>,
	Andy Lutomirski <luto@kernel.org>,
	 David Kaplan <david.kaplan@amd.com>,
	Thomas Gleixner <tglx@kernel.org>,
	 Patrick Bellasi <derkling@google.com>,
	Reiji Watanabe <reijiw@google.com>,
	 Nikita Kalyazin <nikita.kalyazin@linux.dev>,
	Ackerley Tng <ackerleytng@google.com>
Subject: Re: [PATCH v3 03/26] mm: introduce AS_NO_DIRECT_MAP
Date: Fri, 7 Aug 2026 11:49:22 -0700	[thread overview]
Message-ID: <anYospX_XhVDHNGl@google.com> (raw)
In-Reply-To: <CAO9r8zMr+bi95MzG93cPkVmDUzmHYt0obM_niNOyhFLqgcA_Dw@mail.gmail.com>

On Fri, Aug 07, 2026, Yosry Ahmed wrote:
> On Fri, Aug 7, 2026 at 7:26 AM Sean Christopherson <seanjc@google.com> wrote:
> > > AS_NO_DIRECT_MAP will surely make it a bigger problem, but not a new one :P
> >
> > Well, if it disallows GUP, that will be a new problem.
> 
> Yeah I think we should check here and allow GUP on unmapped pages
> (more below). One thing that confuses me is that the
> GUEST_MEMFD_FLAG_NO_DIRECT_MAP series [1] seems to also have this
> check that disallows GUP. So I am not sure if KVM needs GUP to work
> for guest_memfd now (then how does [1] work?) or it will need it to
> work in the future?

Well, there's a reason that series hasn't been merged. :-)

I didn't get far enough to start looking at the GUP stuff, so I genuinely don't
know if what it proposed is sane/correct.

> [1]https://lore.kernel.org/all/20260410151746.61150-7-kalyazin@amazon.com/
> 
> >
> > > > > > At that point, userspace is basically required to
> > > > > > maintain mappings for all host-accessible guest memory, and if there are userspace
> > > > > > mappings, then not using GUP doesn't make much sense.
> > > > > >
> > > > > > Note, I called out x86 because x86 has the most extensive emulator and shadow
> > > > > > paging support, which is where the isolated, one-off accesses happen in spades.
> > > > > > Other architectures might be able to squeak by without userspace mappings, at
> > > > > > least for now.
> > > > > >
> > > > > > So, in all likelihood, KVM will want GUP.
> > > > >
> > > > > Yeah I am thinking that the check here to disallow GUP completely for
> > > > > unmapped pages is aggressive. Maybe it works for now if KVM does not
> > > > > currently have any use cases for accessing guest_memfd memory. But if it does
> > > > > (or will very soon), we need to think more about it, otherwise
> > > > > AS_NO_DIRECT_MAP is not really usable for guest_memfd. Since you said KVM
> > > > > "will want" GUP, I assume it currently doesn't?
> > > >
> > > > Doesn't what?  Have GUP?  KVM heavily uses GUP, including for guest_memfd that
> > > > can be mapped into userspace.
> > >
> > > Your wording made me think that KVM doesn't currently use GUP for
> > > guest_memfd, but I was obviously wrong. So IIUC GUP needs to succeed for
> > > guest_memfd pages with AS_NO_DIRECT_MAP.
> >
> > Yes, though as I said early, it doesn't *have* to be exactly GUP, just something
> > GUP-like.  E.g. it could be a new API, if that's easier/cleaner.  What I don't
> > think is a good idea though is handling this entirely in KVM/guest_memfd.
> 
> Just to clarify, you mean that GUP (or GUP-like) should work in terms of
> pinning the page and handing KVM/guest_memfd the pfn/address, but not
> actually making the page accessible or establishing mappings, right?

No, I'm saying that whatever API the kernel provides needs to ensure there's a
valid kernel mapping (or provide one as a return value).  

> Looking at [2], seems like the consensus was that AS_NO_DIRECT_MAP
> means folios are not in the direct map, and callers are responsible
> for establishing the mappings (e.g. using the mermap).

I'm fine with that direction, but in that case GUP _does_ need to be disallowed.
I.e. _if_ we allow GUP, then GUP itself needs to somehow ensure the direct map
is populated.  If GUP is not allowed, then IMO the core kernel needs to provide
an API to get at "inaccessible" mappings.  Or I suppose GUP could take a flag
that says "I pinky-swear not to try and access the memory via the direct map".

> [2]https://lore.kernel.org/all/aeemS2wm38Cm4qAf@google.com/
> 
> >
> > > To actually access the memory, I assume the guest_memfd side will need to
> > > handle this by either using ephemeral mappings (e.g. mermap), restoring and
> > > zapping direct mappings, or using a userspace mapping. I suppose for the
> > > purposes of AS_NO_DIRECT_MAP core support we just need GUP to succeed?
> >
> > And establish a (ephemeral?) kernel mapping, because general users of GUP will
> > expect that they can access the physical memory through the direct map.  That's
> > why I didn't want to handle any of this in KVM[*], the rules and handling need
> > to be kernel-wide.
> 
> See above, I am struggling to understand where you think establishing
> mappings should lie.  

Heh, I'm not surprised you're struggling, because I don't really have an opinion
on exactly who/what is responsible for establishing the mappings.  What I care
about at this point is not having guest_memfd itself provide a GUP-like API: that
needs to be a generic kernel API.

> The current approach is that AS_NO_DIRECT_MAP just means folios are not
> mapped, and users are responsible for establishing the mappings. I assume you
> agree with this (since you suggested this :P), but you don't want KVM to do
> this ad-hoc, but to have a library for it.
> 
> This library should be the mermap. I imagine (for e.g.) kvm_vcpu_map()
> using the mermap under the hood if it knows the mappings do not exist
> and using the mermap virtual address instead of the direct map
> address. This only works (with the current implementation) if we can
> disable migration (or even better, preemption) while a mapping is
> active, which I imagine would be tricky or just not possible.
> 
> The alternative could be destroying and recreating the mappings when
> the vCPU moves between CPUs, which is.. interesting :)
> 
> I imagine we don't have to sort all of this out now. For the purposes
> of AS_NO_DIRECT_MAP (and secretmem AFAICT), we just need to provide a
> facility to allocate unmapped pages. None of this is user-facing at
> this point.
> 
> >
> > [*] https://lore.kernel.org/all/aeemS2wm38Cm4qAf@google.com


  reply	other threads:[~2026-08-07 18:49 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-26 22:22 [PATCH v3 00/26] mm: Add ALLOC_UNMAPPED and AS_NO_DIRECT_MAP Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 01/26] set_memory: add folio_{zap,restore}_direct_map helpers Brendan Jackman
2026-07-27 10:33   ` Mike Rapoport
2026-07-29 11:42     ` Brendan Jackman
2026-07-30 20:34   ` Yosry Ahmed
2026-07-31  5:21     ` Mike Rapoport
2026-07-31 11:57       ` Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 02/26] mm/secretmem: make use of folio_{zap,restore}_direct_map Brendan Jackman
2026-07-27 10:40   ` Mike Rapoport
2026-07-26 22:22 ` [PATCH v3 03/26] mm: introduce AS_NO_DIRECT_MAP Brendan Jackman
2026-07-30 21:06   ` Yosry Ahmed
2026-07-31 12:15     ` Brendan Jackman
2026-07-31 19:28       ` Yosry Ahmed
2026-08-07  0:02         ` Sean Christopherson
2026-08-07  0:13           ` Yosry Ahmed
2026-08-07  0:19             ` Sean Christopherson
2026-08-07  0:29               ` Yosry Ahmed
2026-08-07 14:26                 ` Sean Christopherson
2026-08-07 18:12                   ` Yosry Ahmed
2026-08-07 18:49                     ` Sean Christopherson [this message]
2026-08-07 19:39                       ` Yosry Ahmed
2026-08-07 22:44                         ` Sean Christopherson
2026-08-07 22:48                           ` Yosry Ahmed
2026-08-02 16:10   ` Mike Rapoport
2026-07-26 22:22 ` [PATCH v3 04/26] x86/mm: split out preallocate_sub_pgd() Brendan Jackman
2026-07-31 22:10   ` Yosry Ahmed
2026-08-02 16:13   ` Mike Rapoport
2026-07-26 22:22 ` [PATCH v3 05/26] x86: move PAE PMD preallocation defines to header Brendan Jackman
2026-07-31 23:59   ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 06/26] x86/tlb: Expose some flush function declarations to modules Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 07/26] x86/mm: introduce mm-local region Brendan Jackman
2026-08-02 16:27   ` Mike Rapoport
2026-08-03 22:29   ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 08/26] x86/mm: move LDT remap into " Brendan Jackman
2026-08-03 22:33   ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 09/26] mm: Create flags arg for __apply_to_page_range() Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 10/26] mm: Add more flags " Brendan Jackman
2026-08-04  0:08   ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 11/26] x86/mm: introduce the mermap Brendan Jackman
2026-08-02 16:40   ` Mike Rapoport
2026-08-04 18:38   ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 12/26] mm: KUnit tests for " Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 13/26] mm: introduce freetype_t Brendan Jackman
2026-08-04 22:23   ` Yosry Ahmed
2026-08-04 23:02   ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 14/26] mm: move migratetype definitions to freetype.h Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 15/26] mm/page_alloc: add support for freetypes with no freelist Brendan Jackman
2026-07-31 14:13   ` Vlastimil Babka (SUSE)
2026-07-26 22:22 ` [PATCH v3 16/26] mm: add definitions for allocating unmapped pages Brendan Jackman
2026-08-04 19:53   ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 17/26] mm: encode freetype flags in pageblock flags Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 18/26] mm/page_alloc: separate pcplists by freetype flags Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 19/26] mm/page_alloc: rename ALLOC_NON_BLOCK back to _HARDER Brendan Jackman
2026-07-31 14:52   ` Vlastimil Babka (SUSE)
2026-08-03  9:20     ` Vlastimil Babka (SUSE)
2026-08-04 21:50     ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 20/26] mm/page_alloc: introduce ALLOC_NOBLOCK Brendan Jackman
2026-07-26 22:22 ` [PATCH v3 21/26] mm/page_alloc: implement FREETYPE_UNMAPPED allocations Brendan Jackman
2026-08-03  9:18   ` Vlastimil Babka (SUSE)
2026-08-04 23:41   ` Yosry Ahmed
2026-08-07  0:05     ` Yosry Ahmed
2026-08-04 23:53   ` Yosry Ahmed
2026-08-05 16:13     ` Yosry Ahmed
2026-08-07  0:16   ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 22/26] mm: Minimal KUnit tests for some new page_alloc logic Brendan Jackman
2026-08-03  9:30   ` Vlastimil Babka (SUSE)
2026-07-26 22:22 ` [PATCH v3 23/26] mm: Split out NR_FREE_PAGES_BLOCKS_[UN]MAPPED Brendan Jackman
2026-08-03  9:32   ` Vlastimil Babka (SUSE)
2026-07-26 22:22 ` [PATCH v3 24/26] mm/page_alloc: always direct compact for unmapped allocs Brendan Jackman
2026-08-03  9:44   ` Vlastimil Babka (SUSE)
2026-08-06 23:29   ` Yosry Ahmed
2026-07-26 22:22 ` [PATCH v3 25/26] mm: plumb alloc flags into some alloc funcs Brendan Jackman
2026-08-03  9:52   ` Vlastimil Babka (SUSE)
2026-07-26 22:22 ` [PATCH v3 26/26] mm: add fast path for AS_NO_DIRECT_MAP Brendan Jackman
2026-07-29 11:52 ` [PATCH v3 00/26] mm: Add ALLOC_UNMAPPED and AS_NO_DIRECT_MAP Brendan Jackman

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=anYospX_XhVDHNGl@google.com \
    --to=seanjc@google.com \
    --cc=ackerleytng@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=bp@alien8.de \
    --cc=brendan.jackman@linux.dev \
    --cc=dave.hansen@linux.intel.com \
    --cc=david.kaplan@amd.com \
    --cc=david@kernel.org \
    --cc=derkling@google.com \
    --cc=hannes@cmpxchg.org \
    --cc=itazur@amazon.co.uk \
    --cc=jackmanb@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=ljs@kernel.org \
    --cc=luto@kernel.org \
    --cc=nikita.kalyazin@linux.dev \
    --cc=patrick.roy@linux.dev \
    --cc=peterz@infradead.org \
    --cc=reijiw@google.com \
    --cc=rientjes@google.com \
    --cc=rppt@kernel.org \
    --cc=sumit.garg@oss.qualcomm.com \
    --cc=tglx@kernel.org \
    --cc=vbabka@kernel.org \
    --cc=weixugc@google.com \
    --cc=will@kernel.org \
    --cc=x86@kernel.org \
    --cc=yosry@kernel.org \
    --cc=ziy@nvidia.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