[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH rfcv2 00/18] Check and sync host IOMMU cap/ecap with vIOMMU
From: |
Zhenzhong Duan |
Subject: |
[PATCH rfcv2 00/18] Check and sync host IOMMU cap/ecap with vIOMMU |
Date: |
Thu, 1 Feb 2024 15:28:00 +0800 |
Hi,
This enables vIOMMU to get host IOMMU cap/ecap information by introducing
a new set/unset_iommu_device interface, then vIOMMU could check or sync
with vIOMMU's own cap/ecap config.
It works by having device side, i.e. VFIO, register either an IOMMULegacyDevice
or IOMMUFDDevice to vIOMMU, which includes necessary data to archive that.
Currently only VFIO device is supported, but it could also be used for other
devices, i.e., VDPA.
For coldplugged device, we can get its host IOMMU cap/ecap during qemu init,
then check and sync into vIOMMU cap/ecap.
For hotplugged device, vIOMMU cap/ecap is frozen, we could only check with
vIOMMU cap/ecap, not allowed to update. IF check fails, hotplugged will fail.
This is also a prerequisite for incoming iommufd nesting series:
'intel_iommu: Enable stage-1 translation'.
I didn't implement cap/ecap sync for legacy VFIO backend, would like to see
what Eric want to put in IOMMULegacyDevice for virtio-iommu and if I can
utilize some of them.
PATCH1-3: Introduce HostIOMMUDevice and two sub class
PATCH4-5: Define HostIOMMUDevice instance in VFIODevice
PATCH6-9: Introdcue host_iommu_device_init callback to intialize HostIOMMUDevice
PATCH10-12: Introdcue set/unset_iommu_device to pass HostIOMMUDevice to vIOMMU
PATCH13-18: Implement cap/ecap check and sync in intel_iommu
Qemu code can be found at:
https://github.com/yiliu1765/qemu/tree/zhenzhong/iommufd_nesting_preq_rfcv2
Thanks
Zhenzhong
Changelog:
rfcv2:
- introduce common abstract HostIOMMUDevice and sub struct for different BEs
(Eric, Cédric)
- remove iommufd_device.[ch] (Cédric)
- remove duplicate iommufd/devid define from VFIODevice (Eric)
- drop the p in aliased_pbus and aliased_pdevfn (Eric)
- assert devfn and iommu_bus in pci_device_get_iommu_bus_devfn (Cédric, Eric)
- use errp in iommufd_device_get_info (Eric)
- split and simplify cap/ecap check/sync code in intel_iommu.c (Cédric)
- move VTDHostIOMMUDevice declaration to intel_iommu_internal.h (Cédric)
- make '(vtd->cap_reg >> 16) & 0x3fULL' a MACRO and add missed '+1' (Cédric)
- block migration if vIOMMU cap/ecap updated based on host IOMMU cap/ecap
- add R-B
Yi Liu (3):
hw/pci: Introduce pci_device_set/unset_iommu_device()
intel_iommu: Add set/unset_iommu_device callback
intel_iommu: Add a framework to check and sync host IOMMU cap/ecap
Zhenzhong Duan (15):
Introduce a common abstract struct HostIOMMUDevice
backends/iommufd: Introduce IOMMUFDDevice
vfio: Introduce IOMMULegacyDevice
vfio: Add host iommu device instance into VFIODevice
vfio: Remove redundant iommufd and devid elements in VFIODevice
vfio: Introduce host_iommu_device_init callback
vfio/container: Implement host_iommu_device_init callback in legacy
mode
vfio/iommufd: Implement host_iommu_device_init callback in iommufd
mode
vfio/pci: Initialize host iommu device instance after attachment
vfio: Initialize host IOMMU device and pass to vIOMMU
intel_iommu: Extract out vtd_cap_init to initialize cap/ecap
backends/iommufd: Introduce helper function iommufd_device_get_info()
intel_iommu: Implement check and sync mechanism in iommufd mode
intel_iommu: Use mgaw instead of s->aw_bits
intel_iommu: Block migration if cap is updated
hw/i386/intel_iommu_internal.h | 15 ++
include/hw/i386/intel_iommu.h | 4 +
include/hw/pci/pci.h | 38 +++-
include/hw/vfio/vfio-common.h | 20 +-
include/hw/vfio/vfio-container-base.h | 1 +
include/sysemu/host_iommu_device.h | 22 ++
include/sysemu/iommufd.h | 18 ++
backends/iommufd.c | 31 ++-
hw/i386/acpi-build.c | 3 +-
hw/i386/intel_iommu.c | 279 ++++++++++++++++++++------
hw/pci/pci.c | 62 +++++-
hw/vfio/ap.c | 2 +-
hw/vfio/ccw.c | 2 +-
hw/vfio/common.c | 10 +-
hw/vfio/container.c | 7 +
hw/vfio/helpers.c | 2 +-
hw/vfio/iommufd.c | 32 +--
hw/vfio/pci.c | 25 ++-
hw/vfio/platform.c | 3 +-
19 files changed, 488 insertions(+), 88 deletions(-)
create mode 100644 include/sysemu/host_iommu_device.h
--
2.34.1
- [PATCH rfcv2 00/18] Check and sync host IOMMU cap/ecap with vIOMMU,
Zhenzhong Duan <=
- [PATCH rfcv2 01/18] Introduce a common abstract struct HostIOMMUDevice, Zhenzhong Duan, 2024/02/01
- [PATCH rfcv2 02/18] backends/iommufd: Introduce IOMMUFDDevice, Zhenzhong Duan, 2024/02/01
- [PATCH rfcv2 04/18] vfio: Add host iommu device instance into VFIODevice, Zhenzhong Duan, 2024/02/01
- [PATCH rfcv2 03/18] vfio: Introduce IOMMULegacyDevice, Zhenzhong Duan, 2024/02/01
- [PATCH rfcv2 05/18] vfio: Remove redundant iommufd and devid elements in VFIODevice, Zhenzhong Duan, 2024/02/01
- [PATCH rfcv2 06/18] vfio: Introduce host_iommu_device_init callback, Zhenzhong Duan, 2024/02/01
- [PATCH rfcv2 07/18] vfio/container: Implement host_iommu_device_init callback in legacy mode, Zhenzhong Duan, 2024/02/01