Re: [PATCH v4 0/6] KVM/vfio: Use file-based reference counting for KVM
From: Claudio Imbrenda
Date: Wed Sep 30 2026 - 03:55:29 EST
On Mon, 28 Sep 2026 15:07:01 +0200
Steffen Eiden <seiden@xxxxxxxxxxxxx> wrote:
> 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 (old version: [1]) to
> address all the relevant persons w/o polluting their mailbox. The
> arm-on-s390 series now dropped those patches and depends on this series
> (for beeing able to link with KVM=y)
>
> 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
Whole series:
Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx>
>
> [1] https://lore.kernel.org/all/20260918133107.1042730-1-seiden@xxxxxxxxxxxxx
>
> ---
> Changes in v4:
> - Add patch to remove now unused file_is_kvm()
> - Add Jasons r-b
> - Link to v3: https://lore.kernel.org/r/20260924-vfio-v3-0-4a294307797b@xxxxxxxxxxxxx
>
> 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@xxxxxxxxxxxxx
>
> 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@xxxxxxxxxxxxx
>
> ---
> Steffen Eiden (6):
> 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
> KVM: Remove unused file_is_kvm
>
> 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 | 10 +++---
> 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 | 19 +++++++++++-
> include/linux/vfio.h | 5 ++-
> virt/kvm/kvm_main.c | 21 +++++++++----
> virt/kvm/vfio.c | 13 +++++---
> 15 files changed, 129 insertions(+), 88 deletions(-)
>
> base-commit: 72d3fcf802c45d00b300f25b848a93c3a2bd7c7e
>