All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: Michael Roth <michael.roth@amd.com>
Cc: qemu-devel@nongnu.org, Juraj Marcin <jmarcin@redhat.com>,
	David Hildenbrand <david@kernel.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Chenyi Qiang <chenyi.qiang@intel.com>,
	Fabiano Rosas <farosas@suse.de>,
	Alexey Kardashevskiy <aik@amd.com>,
	Li Xiaoyao <xiaoyao.li@intel.com>
Subject: Re: [PATCH v3 00/12] KVM/hostmem: Support init-shared guest-memfd as VM backends
Date: Wed, 3 Jun 2026 15:27:17 -0400	[thread overview]
Message-ID: <aiCAFWKEAHkPLCO5@x1.local> (raw)
In-Reply-To: <rjqfiwh57gip3u3psqg33jhmo7ixaj2qwzupc7zdk7f3d26qnu@tglactz67ogk>

On Tue, Jun 02, 2026 at 05:02:29PM -0500, Michael Roth wrote:
> On Mon, Dec 15, 2025 at 03:51:51PM -0500, Peter Xu wrote:
> > v1: https://lore.kernel.org/r/20251023185913.2923322-1-peterx@redhat.com
> > v2: https://lore.kernel.org/r/20251119172913.577392-1-peterx@redhat.com
> > 
> > v3:
> > - Collect R-bs from Xiaoyao
> > - Rebased to 10.2-rc3; no dependency needed now, as those got merged
> > - Reorder patches, touch up commit messages or comments on in-place misuse
> > - Added patch "kvm: Provide explicit error for kvm_create_guest_memfd()" [Xiaoyao]
> > - Added one patch for renaming machine_require_guest_memfd() [Xiaoyao]
> > - Added one patch for renaming memory_region_init_ram_guest_memfd() [Xiaoyao]
> > 
> > =========8<===========
> > 
> > This series allows QEMU to consume init-shared guest-memfd to be a common
> > memory backend. Before this series, guest-memfd was only used in CoCo and
> > the fds will be created implicitly whenever CoCo environment is detected.
> > When used in init-shared mode, the guest-memfd will be specified in the
> > command lines directly just like other types of memory backends.
> > 
> > In the current patchset, I reused the memory-backend-memfd object, rather
> > than creating a new type of object.  After all, guest-memfd (at least from
> > userspace POV) works similarly like a memfd, except that it was tailored
> > for VM's use case.
> > 
> > This approach so far also does not involve gmem bindings to KVM instances,
> > hence it is not prone to issues when the same chunk of RAM will be attached
> > to more than one KVM memslots.
> > 
> > Now, instead of using a normal memfd backend using:
> > 
> >   -object memory-backend-memfd,id=ID,size=SIZE,share=on
> > 
> > One can also boot a VM with guest-memfd:
> > 
> >   -object memory-backend-memfd,id=ID,size=SIZE,share=on,guest-memfd=on
> 
> Hi Peter,

Hi, Michael,

> 
> I'm working on enabling support for this, as well as enabling in-place
> conversion support for confidential VMs[1]. In my series I added a
> dedicated memory-backend-guest-memfd to handle using mmapable
> guest_memfd to back normal VMs (and confidential VMs with in-place
> conversion enabled on top). Xiaoyao mentioned we had some overlap and
> potential inter-dependencies between our series so I took some notes
> on the differences which I've included at the bottom of this email...

To Xiaoyao: thanks for linking these works, and also thanks for answering
other question I raised in the separate thread.

> 
> But at a high-level I think this series is further along in implementing
> guest_memfd for normal VMs, and I would plan to just mostly rebase my
> in-place conversion patches on top of your series. However I think it
> would be a good idea to go with a dedicated memory-backend-guest-memfd
> for reasons I outlined in my notes, so maybe this needs to be discussed
> more.

To me, it was just natural when working on that to reuse memfd backend,
because conceptually they're really the same: I guess guest-memfd is named
as guest-memfd (not guest-special-fd etc.) also because of that.

I don't have a strong feeling here, hostmem-memfd.c is tiny so duplicating
isn't a major concern even if so.  It's just that I don't yet see when gmem
will become special.

Say, all of the features that memfd provides can easily be applied to
guest-memfd either now or at some point later:

  - hugetlb/hugetlbsize being one of them already, I believe we almost know
    1G will happen to gmem soon
  - seal: I don't see why we can't seal a gmemfd too.. maybe it'll come, in
    general the whole seal concept can apply to gmem too.
  - cpr support on memfd (or anything about live update in the future to
    happen on gmem): I believe gmem also want it..

IIUC it's a matter of if we expect future property of guest-memfd that will
stop applying to memfd anymore?

> 
> I also saw you were open to having someone pick up these patches if you
> don't think you'll have a chance to get to them near-term, so I'd be
> happy to pick them up if that's preferable.

Sure!  Indeed I don't have bandwidth to keep working on this one in the
near future. Please feel free to pick whatever needed into your series.

Thanks,

> 
> Thanks!
> 
> -Mike
> 
> [1] https://lore.kernel.org/qemu-devel/20260528000416.8161-1-michael.roth@amd.com/
> 
> Comparisons to the above patchset:
> 
>   [PATCH v3 01/12] kvm: Decouple memory attribute check from kvm_guest_memfd_supported 
>     - similar to:
>         [PATCH 01/12] accel/kvm: Decouple guest_memfd checks from memory attribute checks
>     - to allow mmap case, both defer error handling to ram_block_add() + RAM_GUEST_MEMFD path
>     - pros: adds nice kvm_private_memory_attribute_supported() helper
>     - cons: my patch checks/prints error via kvm_create_guest_memfd(), which
>       makes it a more re-usable error since ram_block_add() isn't the only
>       caller.
>     - IMO, I think we should merge the pros of your patch into my similar patch
>       and add your Co-developed-by, but also fine to keep yours as-is and deal
>       with anything else needed as a follow-up patch
>   [PATCH v3 02/12] kvm: Detect guest-memfd flags supported
>     - similar to the kvm_supported_guest_memfd_flags / kvm_create_guest_memfd_shared()
>       additions that are part of:
>         [02/12] hostmem: Introduce dedicated memory backend for guest_memfd
>     - This patch could be treated as a common dependency of the above and I can
>       drop the corresponding changes from my patch
>   [PATCH v3 03/12] kvm: Provide explicit error for kvm_create_guest_memfd()
>     - Keep as-is
>   [PATCH v3 04/12] ramblock: Rename guest_memfd to guest_memfd_private
>     - Keep as-is
>   [PATCH v3 05/12] memory: Rename RAM_GUEST_MEMFD to RAM_GUEST_MEMFD_PRIVATE
>     - Keep as-is
>   [PATCH v3 06/12] memory: Rename memory_region_has_guest_memfd() to *_private()
>     - Keep as-is
>   [PATCH v3 07/12] hostmem: Rename guest_memfd to guest_memfd_private
>     - Keep as-is
>   [PATCH v3 08/12] hostmem: Support fully shared guest memfd to back a VM
>     - alternative to:
>         [02/12] hostmem: Introduce dedicated memory backend for guest_memfd
>     - pros: re-uses infrastructure from hostmem-memfd
>     - pros: less command-line changes vs. dedicated hostmem-guest-memfd (less libvirt changes?)
>     - cons: less flexibility vs. a dedicated backend
>     - cons: more risk of memfd vs guest_memfd behavior/options diverging over
>             time and having less commonality (e.g. if hugetlb has special options
>             we wouldn't need to muddy the existing documentation for normal
>             memfds or introduce alternative options alongside)
>     - IMO, a clean state patch only requires ~90 lines of potentially-duplicate
>       code, and that's offset to some degree by needing less special-casing
>       throughout hostmem-memfd.c (e.g. this patchset adds 55 lines on top), and
>       it seems worthwhile given some of the advanced use-cases planned around
>       guest_memfd (hugetlb, DAX-like functionality, and persisting userspace
>       across kexec) that might require special handling/options for very
>       different use-cases than normal memfds.
>   [PATCH v3 09/12] machine: Rename machine_require_guest_memfd() to *_private()
>     - Keep as-is
>     - (all these renames are a nice cleanup/prep and will help a lot with making
>       in-place conversion handling more readable)
>   [PATCH v3 10/12] memory: Rename memory_region_init_ram_guest_memfd() to *_private()
>     - Keep as-is
>     - (all these renames are a nice cleanup/prep and will help a lot with making
>       in-place conversion handling more readable)
>   [PATCH v3 11/12] tests/migration-test: Support guest-memfd init shared mem type
>     - Keep as-is
>   [PATCH v3 12/12] tests/migration-test: Add a precopy test for guest-memfd
>     - Keep as-is
> 
> > 
> > The init-shared guest-memfd relies on almost the latest linux, as the
> > mmap() support just landed v6.18-rc2.  When run it on an older qemu, we'll
> > see errors like:
> > 
> >   qemu-system-x86_64: KVM does not support guest_memfd
> > 
> > One thing to mention is live migration is by default supported, however
> > postcopy is still currently not supported.  The postcopy support will have
> > some kernel dependency work to be merged in Linux first.
> > 
> > Thanks,
> > 
> > Peter Xu (11):
> >   kvm: Detect guest-memfd flags supported
> >   kvm: Provide explicit error for kvm_create_guest_memfd()
> >   ramblock: Rename guest_memfd to guest_memfd_private
> >   memory: Rename RAM_GUEST_MEMFD to RAM_GUEST_MEMFD_PRIVATE
> >   memory: Rename memory_region_has_guest_memfd() to *_private()
> >   hostmem: Rename guest_memfd to guest_memfd_private
> >   hostmem: Support fully shared guest memfd to back a VM
> >   machine: Rename machine_require_guest_memfd() to *_private()
> >   memory: Rename memory_region_init_ram_guest_memfd() to *_private()
> >   tests/migration-test: Support guest-memfd init shared mem type
> >   tests/migration-test: Add a precopy test for guest-memfd
> > 
> > Xiaoyao Li (1):
> >   kvm: Decouple memory attribute check from kvm_guest_memfd_supported
> > 
> >  qapi/qom.json                         |  6 ++-
> >  include/hw/boards.h                   |  2 +-
> >  include/system/hostmem.h              |  2 +-
> >  include/system/kvm.h                  |  1 +
> >  include/system/memory.h               | 27 ++++++------
> >  include/system/ram_addr.h             |  2 +-
> >  include/system/ramblock.h             |  7 +++-
> >  tests/qtest/migration/framework.h     |  4 ++
> >  accel/kvm/kvm-all.c                   | 33 ++++++++++++---
> >  accel/stubs/kvm-stub.c                |  6 +++
> >  backends/hostmem-file.c               |  2 +-
> >  backends/hostmem-memfd.c              | 55 +++++++++++++++++++++---
> >  backends/hostmem-ram.c                |  2 +-
> >  backends/hostmem-shm.c                |  2 +-
> >  backends/hostmem.c                    |  2 +-
> >  backends/igvm.c                       |  4 +-
> >  hw/core/machine.c                     |  2 +-
> >  hw/i386/pc.c                          |  6 +--
> >  hw/i386/pc_sysfw.c                    |  8 ++--
> >  hw/i386/x86-common.c                  |  8 ++--
> >  system/memory.c                       | 17 ++++----
> >  system/physmem.c                      | 37 ++++++++++-------
> >  target/i386/kvm/kvm.c                 |  3 +-
> >  tests/qtest/migration/framework.c     | 60 +++++++++++++++++++++++++++
> >  tests/qtest/migration/precopy-tests.c | 12 ++++++
> >  25 files changed, 239 insertions(+), 71 deletions(-)
> > 
> > -- 
> > 2.50.1
> > 
> > 
> 

-- 
Peter Xu



  reply	other threads:[~2026-06-03 19:28 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-15 20:51 [PATCH v3 00/12] KVM/hostmem: Support init-shared guest-memfd as VM backends Peter Xu
2025-12-15 20:51 ` [PATCH v3 01/12] kvm: Decouple memory attribute check from kvm_guest_memfd_supported Peter Xu
2025-12-16 12:41   ` Xiaoyao Li
2025-12-23 16:56     ` Peter Xu
2025-12-16 13:53   ` Fabiano Rosas
2025-12-23 17:02     ` Peter Xu
2026-06-02  1:10   ` Michael Roth
2025-12-15 20:51 ` [PATCH v3 02/12] kvm: Detect guest-memfd flags supported Peter Xu
2025-12-16 13:54   ` Fabiano Rosas
2026-06-02  1:29   ` Michael Roth
2025-12-15 20:51 ` [PATCH v3 03/12] kvm: Provide explicit error for kvm_create_guest_memfd() Peter Xu
2025-12-16  4:03   ` Xiaoyao Li
2025-12-16 13:55   ` Fabiano Rosas
2026-06-02  1:31   ` Michael Roth
2025-12-15 20:51 ` [PATCH v3 04/12] ramblock: Rename guest_memfd to guest_memfd_private Peter Xu
2026-06-02  1:37   ` Michael Roth
2025-12-15 20:51 ` [PATCH v3 05/12] memory: Rename RAM_GUEST_MEMFD to RAM_GUEST_MEMFD_PRIVATE Peter Xu
2025-12-16  5:49   ` Xiaoyao Li
2025-12-23 17:04     ` Peter Xu
2026-06-02  1:39   ` Michael Roth
2025-12-15 20:51 ` [PATCH v3 06/12] memory: Rename memory_region_has_guest_memfd() to *_private() Peter Xu
2026-06-02  1:40   ` Michael Roth
2025-12-15 20:51 ` [PATCH v3 07/12] hostmem: Rename guest_memfd to guest_memfd_private Peter Xu
2025-12-16  5:54   ` Xiaoyao Li
2026-06-02 18:56   ` Michael Roth
2025-12-15 20:51 ` [PATCH v3 08/12] hostmem: Support fully shared guest memfd to back a VM Peter Xu
2025-12-16  6:54   ` Xiaoyao Li
2025-12-16 14:02   ` Fabiano Rosas
2026-06-02 21:40   ` Michael Roth
2026-06-05  7:23     ` David Hildenbrand (Arm)
2026-06-05 11:23       ` David Hildenbrand (Arm)
2025-12-15 20:52 ` [PATCH v3 09/12] machine: Rename machine_require_guest_memfd() to *_private() Peter Xu
2025-12-16  6:55   ` Xiaoyao Li
2026-06-02 21:46   ` Michael Roth
2025-12-15 20:52 ` [PATCH v3 10/12] memory: Rename memory_region_init_ram_guest_memfd() " Peter Xu
2025-12-16  6:56   ` Xiaoyao Li
2026-06-02 21:49   ` Michael Roth
2025-12-15 20:52 ` [PATCH v3 11/12] tests/migration-test: Support guest-memfd init shared mem type Peter Xu
2025-12-16 14:18   ` Fabiano Rosas
2025-12-23 17:09     ` Peter Xu
2025-12-15 20:52 ` [PATCH v3 12/12] tests/migration-test: Add a precopy test for guest-memfd Peter Xu
2025-12-16 14:20   ` Fabiano Rosas
2026-06-02 22:02 ` [PATCH v3 00/12] KVM/hostmem: Support init-shared guest-memfd as VM backends Michael Roth
2026-06-03 19:27   ` Peter Xu [this message]
2026-06-04 22:36     ` Michael Roth
2026-06-05 14:57       ` Peter Xu
2026-06-08 17:59         ` Michael Roth

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=aiCAFWKEAHkPLCO5@x1.local \
    --to=peterx@redhat.com \
    --cc=aik@amd.com \
    --cc=chenyi.qiang@intel.com \
    --cc=david@kernel.org \
    --cc=farosas@suse.de \
    --cc=jmarcin@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=xiaoyao.li@intel.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 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.