Peter Maydell
b1f4f4695c
vfio: Clean up includes
...
This commit was created with scripts/clean-includes:
./scripts/clean-includes --git vfio hw/vfio hw/vfio-user
All .c should include qemu/osdep.h first. The script performs three
related cleanups:
* Ensure .c files include qemu/osdep.h first.
* Including it in a .h is redundant, since the .c already includes
it. Drop such inclusions.
* Likewise, including headers qemu/osdep.h includes is redundant.
Drop these, too.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Message-id: 20251104160943.751997-9-peter.maydell@linaro.org
2025-11-14 13:18:04 +00:00
Philippe Mathieu-Daudé
4db362f68c
system/physmem: Extract API out of 'system/ram_addr.h' header
...
Very few files use the Physical Memory API. Declare its
methods in their own header: "system/physmem.h".
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Message-Id: <20251001175448.18933-19-philmd@linaro.org >
2025-10-07 05:03:56 +02:00
Philippe Mathieu-Daudé
aa60bdb700
system/physmem: Drop 'cpu_' prefix in Physical Memory API
...
The functions related to the Physical Memory API declared
in "system/ram_addr.h" do not operate on vCPU. Remove the
'cpu_' prefix.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Message-Id: <20251001175448.18933-18-philmd@linaro.org >
2025-10-07 05:03:56 +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
dcce51b193
hw/vfio/container-base.c: rename file to container.c
...
Rename the file to reflect the previous rename of VFIOContainerBase to
VFIOContainer.
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-7-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
a3bcae62b6
hw/vfio/container.c: rename file to container-legacy.c
...
This file is mostly concerned with the VFIOLegacyContainer implementation so
rename it to reflect the previous rename of VFIOContainer to
VFIOLegacyContainer.
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-6-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
5947f69b63
hw/vfio/container.c: use QOM casts where appropriate
...
Use QOM casts to convert between VFIOContainer and VFIOContainerBase instead
of accessing bcontainer directly.
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-5-mark.caveayland@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-08 16:46:31 +02:00
Zhenzhong Duan and Cédric Le Goater
bb1a6f1f43
vfio: Introduce helper vfio_pci_from_vfio_device()
...
Introduce helper vfio_pci_from_vfio_device() to transform from VFIODevice
to VFIOPCIDevice, also to hide low level VFIO_DEVICE_TYPE_PCI type check.
Suggested-by: Cédric Le Goater <clg@redhat.com >
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/20250822064101.123526-5-zhenzhong.duan@intel.com
[ clg: Added documentation ]
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-09-08 16:46:31 +02:00
Zhenzhong Duan and Cédric Le Goater
c72d6ebaad
vfio/container: fails mdev hotplug if add migration blocker failed
...
It's aggressive to abort a running QEMU process when hotplug a mdev
and it fails migration blocker adding.
Fix by just failing mdev hotplug itself.
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/20250623102235.94877-3-zhenzhong.duan@intel.com
[ clg: Changed test on value returned by migrate_add_blocker_modes() ]
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-06-26 08:55:38 +02:00
Zhenzhong Duan and Cédric Le Goater
abc6249d42
vfio/container: Fix SIGSEGV when open container file fails
...
When open /dev/vfio/vfio fails, SIGSEGV triggers because
vfio_listener_unregister() doesn't support a NULL bcontainer
pointer.
Fixes: a1f267a7d4 ("vfio/container: reform vfio_container_connect cleanup")
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/20250623102235.94877-2-zhenzhong.duan@intel.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-06-26 08:55:37 +02:00
Steve Sistare and Cédric Le Goater
dac0dd68d9
vfio/container: mdev cpr blocker
...
During CPR, after VFIO_DMA_UNMAP_FLAG_VADDR, the vaddr is temporarily
invalid, so mediated devices cannot be supported. Add a blocker for them.
This restriction will not apply to iommufd containers when CPR is added
for them in a future patch.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/1749569991-25171-8-git-send-email-steven.sistare@oracle.com
[ clg: Fixed context change in VFIODevice ]
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-06-11 14:01:58 +02:00
Steve Sistare and Cédric Le Goater
7e9f214113
vfio/container: restore DMA vaddr
...
In new QEMU, do not register the memory listener at device creation time.
Register it later, in the container post_load handler, after all vmstate
that may affect regions and mapping boundaries has been loaded. The
post_load registration will cause the listener to invoke its callback on
each flat section, and the calls will match the mappings remembered by the
kernel.
The listener calls a special dma_map handler that passes the new VA of each
section to the kernel using VFIO_DMA_MAP_FLAG_VADDR. Restore the normal
handler at the end.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/1749569991-25171-7-git-send-email-steven.sistare@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-06-11 14:01:58 +02:00
Steve Sistare and Cédric Le Goater
c29a65ed68
vfio/container: preserve descriptors
...
At vfio creation time, save the value of vfio container, group, and device
descriptors in CPR state. On qemu restart, vfio_realize() finds and uses
the saved descriptors.
During reuse, device and iommu state is already configured, so operations
in vfio_realize that would modify the configuration, such as vfio ioctl's,
are skipped. The result is that vfio_realize constructs qemu data
structures that reflect the current state of the device.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com >
Link: https://lore.kernel.org/qemu-devel/1749569991-25171-5-git-send-email-steven.sistare@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-06-11 14:01:58 +02:00
Steve Sistare and Cédric Le Goater
54857b0816
vfio/container: register container for cpr
...
Register a legacy container for cpr-transfer, replacing the generic CPR
register call with a more specific legacy container register call. Add a
blocker if the kernel does not support VFIO_UPDATE_VADDR or VFIO_UNMAP_ALL.
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: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/1749569991-25171-4-git-send-email-steven.sistare@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-06-11 14:01:58 +02:00
Steve Sistare and Cédric Le Goater
3ed34463a2
vfio: move vfio-cpr.h
...
Move vfio-cpr.h to include/hw/vfio, because it will need to be included by
other files there.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com >
Link: https://lore.kernel.org/qemu-devel/1748546679-154091-9-git-send-email-steven.sistare@oracle.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-06-05 10:40:38 +02:00
John Levon and Cédric Le Goater
44d0acf834
vfio/container: pass MemoryRegion to DMA operations
...
Pass through the MemoryRegion to DMA operation handlers of vfio
containers. The vfio-user container will need this later, to translate
the vaddr into an offset for the dma map vfio-user message; CPR will
also will need this.
Originally-by: John Johnson <john.g.johnson@oracle.com >
Signed-off-by: Jagannathan Raman <jag.raman@oracle.com >
Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com >
Signed-off-by: John Levon <john.levon@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Reviewed-by: Steve Sistare <steven.sistare@oracle.com >
Link: https://lore.kernel.org/qemu-devel/20250521215534.2688540-1-john.levon@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-06-05 10:40:38 +02:00
John Levon and Cédric Le Goater
9458d9b4dc
vfio: implement unmap all for DMA unmap callbacks
...
Handle unmap_all in the DMA unmap handlers rather than in the caller.
Signed-off-by: John Levon <john.levon@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250507152020.1254632-10-john.levon@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-05-09 12:42:28 +02:00
John Levon and Cédric Le Goater
5a22b50591
vfio: add unmap_all flag to DMA unmap callback
...
We'll use this parameter shortly; this just adds the plumbing.
Signed-off-by: John Levon <john.levon@nutanix.com >
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/20250507152020.1254632-9-john.levon@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-05-09 12:42:28 +02:00
John Levon and Cédric Le Goater
d60fb709cf
vfio: add vfio_device_unprepare()
...
Add a helper that's the inverse of vfio_device_prepare().
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Signed-off-by: John Levon <john.levon@nutanix.com >
Link: https://lore.kernel.org/qemu-devel/20250507152020.1254632-3-john.levon@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-05-09 12:42:28 +02:00
John Levon and Cédric Le Goater
a901682f53
vfio: add vfio_device_prepare()
...
Commonize some initialization code shared by the legacy and iommufd vfio
implementations.
Reviewed-by: Cédric Le Goater <clg@redhat.com >
Signed-off-by: John Levon <john.levon@nutanix.com >
Link: https://lore.kernel.org/qemu-devel/20250507152020.1254632-2-john.levon@nutanix.com
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-05-09 12:42:28 +02:00
Steve Sistare and Cédric Le Goater
07f86929e5
vfio/container: vfio_container_group_add
...
Add vfio_container_group_add to de-dup some code. No functional change.
Signed-off-by: Steve Sistare <steven.sistare@oracle.com >
Reviewed-by: Cedric Le Goater <clg@redhat.com >
Link: https://lore.kernel.org/qemu-devel/1746195760-101443-4-git-send-email-steven.sistare@oracle.com
[ clg: vfio_attach_discard_disable() -> vfio_container_attach_discard_disable() ]
Signed-off-by: Cédric Le Goater <clg@redhat.com >
2025-05-09 12:42:27 +02:00