Nguyen Dinh Phi and Philippe Mathieu-Daudé
b12c1b3724
qom: remove redundant typedef when use OBJECT_DECLARE_SIMPLE_TYPE
...
When OBJECT_DECLARE_SIMPLE_TYPE is used, it automatically provides
the typedef, so we don’t have to define it ourselves.
Signed-off-by: Nguyen Dinh Phi <phind.uet@gmail.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Message-ID: <20251023063429.1400398-1-phind.uet@gmail.com >
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
2025-10-28 08:08:04 +01:00
John Levon and Cédric Le Goater
aaca725884
vfio: rename field to "num_initial_regions"
...
We set VFIODevice::num_regions at initialization time, and do not
otherwise refresh it. As it is valid in theory for a VFIO device to
later increase the number of supported regions, rename the field to
"num_initial_regions" to better reflect its semantics.
Signed-off-by: John Levon <john.levon@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Reviewed-by: Alex Williamson <alex@shazbot.org >
Link: https://lore.kernel.org/qemu-devel/20251014151227.2298892-2-john.levon@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-10-22 08:12:52 +02:00
Zhenzhong Duan and Cédric Le Goater
962bcf0911
vfio/container: Support unmap all in one ioctl()
...
VFIO type1 kernel uAPI supports unmapping whole address space in one call
since commit c19650995374 ("vfio/type1: implement unmap all"). Use the
unmap_all variant whenever it's supported in kernel.
Opportunistically pass VFIOLegacyContainer pointer in low level function
vfio_legacy_dma_unmap_one().
Co-developed-by: John Levon <levon@movementarian.org >
Signed-off-by: John Levon <levon@movementarian.org >
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20251009040134.334251-2-zhenzhong.duan@intel.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-10-22 08:12:52 +02:00
Zhenzhong Duan and Cédric Le Goater
5a78db7f80
vfio/container: Remap only populated parts in a section
...
If there are multiple containers and unmap-all fails for some of them, we
need to remap vaddr for the other containers for which unmap-all succeeded.
When ram discard is enabled, we should only remap populated parts in a
section instead of the whole section.
Fixes: eba1f657cb ("vfio/container: recover from unmap-all-vaddr failure")
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com >
Reviewed-by: Steven Sistare <steven.sistare@oracle.com >
Reviewed-by: David Hildenbrand <david@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250928085432.40107-2-zhenzhong.duan@intel.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-10-22 08:12:52 +02:00
Philippe Mathieu-Daudé and Cédric Le Goater
f0b52aa08a
hw/vfio: Use uint64_t for IOVA mapping size in vfio_container_dma_*map
...
The 'ram_addr_t' type is described as:
a QEMU internal address space that maps guest RAM physical
addresses into an intermediate address space that can map
to host virtual address spaces.
This doesn't represent well an IOVA mapping size. Simply use
the uint64_t type.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250930123528.42878-5-philmd@linaro.org
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-10-02 10:41:23 +02:00
Philippe Mathieu-Daudé and Cédric Le Goater
0ca70d3bf7
hw/vfio: Avoid ram_addr_t in vfio_container_query_dirty_bitmap()
...
The 'ram_addr_t' type is described as:
a QEMU internal address space that maps guest RAM physical
addresses into an intermediate address space that can map
to host virtual address spaces.
vfio_container_query_dirty_bitmap() doesn't expect such QEMU
intermediate address, but a guest physical addresses. Use the
appropriate 'hwaddr' type, rename as @translated_addr for
clarity.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250930123528.42878-4-philmd@linaro.org
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-10-02 10:41:23 +02:00
Mark Cave-Ayland and Cédric Le Goater
7c773b4267
include/hw/vfio/vfio-device.h: fix include header guard name
...
The header guard was incorrectly called HW_VFIO_VFIO_COMMON_H instead of
HW_VFIO_VFIO_DEVICE_H.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Link: https://lore.kernel.org/qemu-devel/20250925113159.1760317-29-mark.caveayland@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-25 17:55:20 +02:00
Mark Cave-Ayland and Cédric Le Goater
ef70eb32b8
include/hw/vfio/vfio-container-base.h: rename file to vfio-container.h
...
With the rename of VFIOContainerBase to VFIOContainer, the vfio-container-base.h
header file containing the struct definition is misleading. Rename it from
vfio-container-base.h to vfio-container.h accordingly, fixing up the name
of the include guard at the same time.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250925113159.1760317-5-mark.caveayland@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-25 17:55:19 +02:00
Mark Cave-Ayland and Cédric Le Goater
07cbbfb108
include/hw/vfio/vfio-container.h: rename file to vfio-container-legacy.h
...
With the rename of VFIOContainer to VFIOLegacyContainer, the vfio-container.h
header file containing the struct definition is misleading. Rename it from
vfio-container.h to vfio-container-legacy.h accordingly, fixing up the name
of the include guard at the same time.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250925113159.1760317-4-mark.caveayland@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-25 17:55:19 +02:00
Mark Cave-Ayland and Cédric Le Goater
e2e269d580
include/hw/vfio/vfio-container-base.h: rename VFIOContainerBase to VFIOContainer
...
Now that the VFIOContainer struct name is available, rename VFIOContainerBase
to VFIOContainer to better indicate that it is the superclass of other
VFIOFooContainer structs.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250925113159.1760317-3-mark.caveayland@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-25 17:55:19 +02:00
Mark Cave-Ayland and Cédric Le Goater
da9211f28e
include/hw/vfio/vfio-container.h: rename VFIOContainer to VFIOLegacyContainer
...
The VFIOContainer struct represents the legacy VFIO container even though the
name suggests it may be the common superclass of all VFIO containers. Rename it
to VFIOLegacyContainer to make this clearer, which is also a better match for
its VFIO_IOMMU_LEGACY QOM type name.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250925113159.1760317-2-mark.caveayland@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-25 17:55:19 +02:00
Mark Cave-Ayland and Cédric Le Goater
507a118e9f
vfio/vfio-container.h: rename VFIOContainer bcontainer field to parent_obj
...
Now that nothing accesses the bcontainer field directly, rename bcontainer to
parent_obj as per our current coding guidelines.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Link: https://lore.kernel.org/qemu-devel/20250715093110.107317-8-mark.caveayland@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-08 16:46:31 +02:00
Mark Cave-Ayland and Cédric Le Goater
98c12de5ae
vfio/vfio-container.h: update VFIOContainer declaration
...
Update the VFIOContainer declaration so that it is closer to our coding
guidelines: emove the explicit typedef (this is already handled by the
OBJECT_DECLARE_TYPE() macro) and add a blank line after the parent object.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Link: https://lore.kernel.org/qemu-devel/20250715093110.107317-3-mark.caveayland@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-08 16:46:31 +02:00
Mark Cave-Ayland and Cédric Le Goater
42875d256d
vfio/vfio-container-base.h: update VFIOContainerBase declaration
...
Update the VFIOContainerBase declaration to match our current coding
guidelines: remove the explicit typedef (this is already handled by the
OBJECT_DECLARE_TYPE() macro), add a blank line after the parent object,
rename parent to parent_obj, and move the macro declaration next to the
VFIOContainerBase struct declaration.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250715093110.107317-2-mark.caveayland@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-08 16:46:31 +02:00
Cédric Le Goater
e7a47f7177
vfio: Move vfio-region.h under hw/vfio/
...
Since the removal of vfio-platform, header file vfio-region.h no
longer needs to be a public VFIO interface. Move it under hw/vfio.
Reviewed-by: Eric Auger <eric.auger@redhat.com >
Reviewed-by: Alex Williamson <alex.williamson@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250901064631.530723-9-clg@redhat.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-08 16:46:31 +02:00
Cédric Le Goater
762c855439
vfio: Remove 'vfio-platform'
...
The VFIO_PLATFORM device type has been deprecated in the QEMU 10.0
timeframe. All dependent devices have been removed. Now remove the
core vfio platform framework.
Rename VFIO_DEVICE_TYPE_PLATFORM enum to VFIO_DEVICE_TYPE_UNUSED to
maintain the same index for the CCW and AP VFIO device types.
Reviewed-by: Eric Auger <eric.auger@redhat.com >
Reviewed-by: Alex Williamson <alex.williamson@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250901064631.530723-8-clg@redhat.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-08 16:46:31 +02:00
Cédric Le Goater
8ebc416ac1
vfio: Remove 'vfio-calxeda-xgmac' device
...
The VFIO_XGMAC device type has been deprecated in the QEMU 10.0
timeframe. Remove it.
Reviewed-by: Eric Auger <eric.auger@redhat.com >
Reviewed-by: Alex Williamson <alex.williamson@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250901064631.530723-7-clg@redhat.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-08 16:46:31 +02:00
Cédric Le Goater
aeb1a50d4a
vfio: Remove 'vfio-amd-xgbe' device
...
The VFIO_AMD_XGBE device type has been deprecated in the QEMU 10.0
timeframe. The AMD "Seattle" device is not supported anymore. Remove it.
Reviewed-by: Eric Auger <eric.auger@redhat.com >
Reviewed-by: Alex Williamson <alex.williamson@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250901064631.530723-6-clg@redhat.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-08 16:46:31 +02:00
Steve Sistare and Cédric Le Goater
322ee16824
vfio/pci: preserve pending interrupts
...
cpr-transfer may lose a VFIO interrupt because the KVM instance is
destroyed and recreated. If an interrupt arrives in the middle, it is
dropped. To fix, stop pending new interrupts during cpr save, and pick
up the pieces. In more detail:
Stop the VCPUs. Call kvm_irqchip_remove_irqfd_notifier_gsi --> KVM_IRQFD to
deassign the irqfd gsi that routes interrupts directly to the VCPU and KVM.
After this call, interrupts fall back to the kernel vfio_msihandler, which
writes to QEMU's kvm_interrupt eventfd. CPR already preserves that
eventfd. When the route is re-established in new QEMU, the kernel tests
the eventfd and injects an interrupt to KVM if necessary.
Deassign INTx in a similar manner. For both MSI and INTx, remove the
eventfd handler so old QEMU does not consume an event.
If an interrupt was already pended to KVM prior to the completion of
kvm_irqchip_remove_irqfd_notifier_gsi, it will be recovered by the
subsequent call to cpu_synchronize_all_states, which pulls KVM interrupt
state to userland prior to saving it in vmstate.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com >
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com >
Link: https://lore.kernel.org/qemu-devel/1752689169-233452-3-git-send-email-steven.sistare@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-08-09 00:06:48 +02:00
Maciej S. Szmigiero and Cédric Le Goater
300dcf58b7
vfio/migration: Max in-flight VFIO device state buffers size limit
...
Allow capping the maximum total size of in-flight VFIO device state buffers
queued at the destination, otherwise a malicious QEMU source could
theoretically cause the target QEMU to allocate unlimited amounts of memory
for buffers-in-flight.
Since this is not expected to be a realistic threat in most of VFIO live
migration use cases and the right value depends on the particular setup
disable this limit by default by setting it to UINT64_MAX.
Reviewed-by: Fabiano Rosas <farosas@suse.de >
Reviewed-by: Avihai Horon <avihaih@nvidia.com >
Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com >
Link: https://lore.kernel.org/qemu-devel/4f7cad490988288f58e36b162d7a888ed7e7fd17.1752589295.git.maciej.szmigiero@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-07-15 17:11:12 +02:00
Maciej S. Szmigiero and Cédric Le Goater
6380b0a02f
vfio/migration: Add x-migration-load-config-after-iter VFIO property
...
This property allows configuring whether to start the config load only
after all iterables were loaded, during non-iterables loading phase.
Such interlocking is required for ARM64 due to this platform VFIO
dependency on interrupt controller being loaded first.
The property defaults to AUTO, which means ON for ARM, OFF for other
platforms.
Reviewed-by: Fabiano Rosas <farosas@suse.de >
Reviewed-by: Avihai Horon <avihaih@nvidia.com >
Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com >
Link: https://lore.kernel.org/qemu-devel/0e03c60dbc91f9a9ba2516929574df605b7dfcb4.1752589295.git.maciej.szmigiero@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-07-15 17:11:12 +02:00
Steve Sistare and Cédric Le Goater
99cedd5d55
vfio/container: delete old cpr register
...
vfio_cpr_[un]register_container is no longer used since they were
subsumed by container type-specific registration. Delete them.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com >
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/1751493538-202042-21-git-send-email-steven.sistare@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-07-03 13:42:28 +02:00
Steve Sistare and Cédric Le Goater
f2f3e4667e
vfio/iommufd: cpr state
...
VFIO iommufd devices will need access to ioas_id, devid, and hwpt_id in
new QEMU at realize time, so add them to CPR state. Define CprVFIODevice
as the object which holds the state and is serialized to the vmstate file.
Define accessors to copy state between VFIODevice and CprVFIODevice.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com >
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com >
Link: https://lore.kernel.org/qemu-devel/1751493538-202042-15-git-send-email-steven.sistare@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-07-03 13:42:28 +02:00
Steve Sistare and Cédric Le Goater
a6f2f9c42f
migration: vfio cpr state hook
...
Define a list of vfio devices in CPR state, in a subsection so that
older QEMU can be live updated to this version. However, new QEMU
will not be live updateable to old QEMU. This is acceptable because
CPR is not yet commonly used, and updates to older versions are unusual.
The contents of each device object will be defined by the vfio subsystem
in a subsequent patch.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com >
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com >
Link: https://lore.kernel.org/qemu-devel/1751493538-202042-14-git-send-email-steven.sistare@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-07-03 13:42:28 +02:00
Steve Sistare and Cédric Le Goater
06c6a65852
vfio/iommufd: register container for cpr
...
Register a vfio iommufd container and device for CPR, replacing the generic
CPR register call with a more specific iommufd register call. Add a
blocker if the kernel does not support IOMMU_IOAS_CHANGE_PROCESS.
This is mostly boiler plate. The fields to to saved and restored are added
in subsequent patches.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com >
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com >
Link: https://lore.kernel.org/qemu-devel/1751493538-202042-13-git-send-email-steven.sistare@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-07-03 13:42:28 +02:00