[PATCH 0/3] KVM, vfio: remove exported KVM symbols

Paolo Bonzini
2026-04-07T18:01:21Z

KVM right now exports three symbols for the whole kernel to manage
the reference count of "struct kvm"; these are used by VFIO just to
keep the "struct kvm" alive. This can mostly be replaced
by inlines, and in fact the entire definition of struct kvm can be
made opaque to VFIO.

Besides the cleanup of removing the sort-of-deprecated symbol_get() and
the bidirectional dependency between KVM and VFIO, this is useful for
the recently posted support for Arm VMs on s390. In that scenario each
KVM implementation module wants to have its own copy of kvm_put_kvm()
in order to call the "right" kvm_destroy_vm(). With multiple modules,
VFIO has no way to do a symbol_get() from the right module.

With this series, that problem is gone because kvm_put_kvm dispatches
through a function pointer, set by whichever implementation creates the VM.
The main issue is that symbol_get() was implicitly taking a reference
to the KVM module, and that has to be preserved. This is the purpose
of patch 1.

Thanks,

Paolo

Paolo Bonzini (3):
VFIO: take reference to the KVM module
KVM, vfio: remove symbol_get(kvm_get_kvm_safe) from vfio
KVM, vfio: remove symbol_get(kvm_put_kvm) from vfio

arch/x86/kvm/mmu/tdp_mmu.c | 2 +-
arch/x86/kvm/vmx/nested.h | 4 +--
drivers/vfio/device_cdev.c | 2 +-
drivers/vfio/group.c | 5 ++--
drivers/vfio/vfio.h | 15 +++++++----
drivers/vfio/vfio_main.c | 51 ++++++++++++++------------------------
include/linux/kvm_host.h | 9 +++----
include/linux/kvm_types.h | 30 ++++++++++++++++++++++
include/linux/vfio.h | 4 +--
virt/kvm/kvm_main.c | 34 ++++++-------------------
virt/kvm/vfio.c | 4 +--
11 files changed, 80 insertions(+), 80 deletions(-)

--
2.53.0