mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v3 0/5] KVM/vfio: Use file-based reference counting for KVM
@ 2026-09-24  8:58 Steffen Eiden
  2026-09-24  8:58 ` [PATCH v3 1/5] KVM: Introduce file_to_kvm_<arch>() infrastructure Steffen Eiden
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Steffen Eiden @ 2026-09-24  8:58 UTC (permalink / raw)
  To: Christian Borntraeger, Janosch Frank, Claudio Imbrenda,
	David Hildenbrand, Heiko Carstens, Vasily Gorbik,
	Alexander Gordeev, Sven Schnelle, Sean Christopherson,
	Paolo Bonzini, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
	Dave Hansen, x86, H. Peter Anvin, Matthew Rosato, Farhan Ali,
	Eric Farman, Tony Krowiak, Halil Pasic, Jason Herne,
	Harald Freudenberger, Holger Dengler, Alex Williamson
  Cc: kvm, linux-s390, linux-kernel, Steffen Eiden, Jason Gunthorpe

This series switches the KVM-VFIO interface and external consumers over to
standard file-based reference counting, eliminating all external KVM symbol
exports.

This is a spin-off for the arm on s390 series [1] to address all the
relevant persons w/o polluting their mailbox.

Currently, VFIO integrates with KVM by looking up kvm_get_kvm_safe() and
kvm_put_kvm() dynamically using symbol_get(), manually tracking module
reference counts and storing a put_kvm function pointer in struct
vfio_device.

In the ARM64-on-s390 architecture, a second concurrent KVM module
(kvm-arm64) is introduced alongside native KVM to host hardware-accelerated
ARM64 guests. Having exported global symbols (like kvm_get_kvm/kvm_put_kvm)
creates symbol conflicts and prevents clean coexistence of two KVM modules.

Additionally, the file based counting simplifies the code and reuses
the existing fs refcounting.

Instead of passing raw KVM pointers and managing module symbols manually, the
interface now passes the underlying VM file descriptor throughout VFIO and
associated architecture subsystems. To safely extract the KVM instance from a
file, an architecture-namespaced helper mechanism is introduced that verifies
the file belongs to the expected KVM implementation before accessing its
internal state. A back-pointer from the KVM instance to its associated file is
maintained across its lifecycle so subsystems can safely acquire file
references on demand. Finally, with VFIO, architecture page tracking, and
device hooks converted to use file references, the remaining KVM reference-
counting exports are restricted strictly to internal KVM modules.

	Steffen

[1] https://lore.kernel.org/all/20260918133107.1042730-1-seiden@linux.ibm.com

---
Changes in v3:
- Split the previous single monolithic patch into 5 smaller, focused patches:
  1. Add opt-in macro infrastructure for `file_to_kvm_<arch>()` helpers.
  2. Add `kvm->file` back-pointer to `struct kvm`.
  3. Use `file_to_kvm_x86()` helper in AMD SEV.
  4. Convert VFIO, s390 vfio-ap/zpci, and x86 page-track to file-based refcounting.
  5. Restrict `kvm_get_kvm`/`kvm_put_kvm` to `EXPORT_SYMBOL_FOR_KVM_INTERNAL`.
- Introduce macro-generated, typed `file_to_kvm_<arch>()` helpers instead of generic casts.
- Clean up `vfio_pci_zdev.c` by passing `struct file *` through `zpci_kvm_hook.kvm_register`.
- Update x86 page-track and s390 AP/PCI to use `file_to_kvm_<arch>()`.
- Update x86 Makefile export checks.
- Link to v2: https://lore.kernel.org/r/20260903-vfio-v2-1-ef4cd4190ae7@linux.ibm.com

Changes in v2:
- Rebase on 7.3-rc1+ and resolve conflict with 9f240376d034 ("s390/pci: Store
  PCI error information for passthrough devices"),
- Fix stub prototype for vfio_group_set_kvm for !CONFIG_VFIO_GROUP
- Link to v1:   https://lore.kernel.org/r/20260812-vfio-v1-1-5cfe0b1fa4e7@linux.ibm.com

---
Steffen Eiden (5):
      KVM: Introduce file_to_kvm_<arch>() infrastructure
      KVM: Add file back-pointer to struct kvm
      KVM: x86: Use file_to_kvm_x86() in SEV
      KVM/vfio: Use file-based reference counting for KVM
      KVM: Restrict kvm_get_kvm/kvm_put_kvm export to internal KVM modules

 arch/s390/include/asm/kvm_host_s390.h |  4 ++-
 arch/s390/kvm/s390/pci.c              |  9 ++++--
 arch/x86/include/asm/kvm_host.h       |  2 ++
 arch/x86/include/asm/kvm_page_track.h |  8 ++---
 arch/x86/kvm/Makefile                 |  4 +--
 arch/x86/kvm/mmu/page_track.c         | 22 +++++++++-----
 arch/x86/kvm/svm/sev.c                |  8 ++---
 drivers/s390/crypto/vfio_ap_ops.c     | 20 ++++++++----
 drivers/vfio/group.c                  | 11 ++++++-
 drivers/vfio/vfio.h                   | 12 ++++----
 drivers/vfio/vfio_main.c              | 57 +++++++++++------------------------
 include/linux/kvm_host.h              | 18 +++++++++++
 include/linux/vfio.h                  |  5 ++-
 virt/kvm/kvm_main.c                   | 21 +++++++++++--
 virt/kvm/vfio.c                       | 13 +++++---
 15 files changed, 130 insertions(+), 84 deletions(-)

base-commit: 5dd1818b15d98d4a20806cd00b1b40320b06004f

---
Steffen Eiden <seiden@linux.ibm.com>


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

end of thread, other threads:[~2026-09-24 12:49 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-24  8:58 [PATCH v3 0/5] KVM/vfio: Use file-based reference counting for KVM Steffen Eiden
2026-09-24  8:58 ` [PATCH v3 1/5] KVM: Introduce file_to_kvm_<arch>() infrastructure Steffen Eiden
2026-09-24  8:58 ` [PATCH v3 2/5] KVM: Add file back-pointer to struct kvm Steffen Eiden
2026-09-24  8:58 ` [PATCH v3 3/5] KVM: x86: Use file_to_kvm_x86() in SEV Steffen Eiden
2026-09-24  8:58 ` [PATCH v3 4/5] KVM/vfio: Use file-based reference counting for KVM Steffen Eiden
2026-09-24 12:47   ` Jason J. Herne
2026-09-24  8:58 ` [PATCH v3 5/5] KVM: Restrict kvm_get_kvm/kvm_put_kvm export to internal KVM modules Steffen Eiden

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

all inboxes | Powered by JetHome®