>-----Original Message----- >From: Jason Wang <jasowang@redhat.com> >Subject: Re: [PATCH v1 0/6] Check and sync host IOMMU cap/ecap with >vIOMMU > >On Wed, Feb 28, 2024 at 5:46 PM Zhenzhong Duan ><zhenzhong.duan@intel.com> wrote: >> >> Hi, >> >> Based on Joao's suggestion, the iommufd nesting prerequisite series [1] >> is further splitted to host IOMMU device abstract part [2] and vIOMMU >> check/sync part. This series implements the 2nd part. >> >> This enables vIOMMU to get host IOMMU cap/ecap information by >implementing >> a new set/unset_iommu_device interface, then vIOMMU could check or >sync >> with vIOMMU's own cap/ecap config. > >Does it mean that it would supress the cap/ecap config from the qemu >command line? No, cap/ecap have two kinds of bits, one is not controlled by cmdline, e.g., MGAW; the other is, e.g., we initialize SAGAW through aw_bits. I treat qemu cmdline with higher priority. We only allow update those bits not related to any cmdline, e.g., update vIOMMU MGAW with host MGAW. If there is cmdline controlled cap/ecap bits incompatibility between host and vIOMMU, vfio device hotplug should fail. > If yes, I wonder how to maintain the migration compatibility. If cap/ecap is updated due to above reason, I have below patch to block migration. [PATCH v1 6/6] intel_iommu: Block migration if cap is updated Thanks Zhenzhong > >Thanks > >> >> 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. >> >> Because it's becoming clear on community's suggestion, I'd like to remove >> rfc tag from this version. >> >> Qemu code can be found at: >> >https://github.com/yiliu1765/qemu/tree/zhenzhong/iommufd_nesting_pre >q_part2_v1 >> >> [1] https://lore.kernel.org/qemu-devel/20240201072818.327930-1- >zhenzhong.duan@intel.com >> [2] https://lists.gnu.org/archive/html/qemu-devel/2024- >02/msg06314.html >> >> Thanks >> Zhenzhong >> >> Changelog: >> v1: >> - convert HostIOMMUDevice to sub object pointer in vtd_check_hdev >> >> 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 (2): >> intel_iommu: Add set/unset_iommu_device callback >> intel_iommu: Add a framework to check and sync host IOMMU cap/ecap >> >> Zhenzhong Duan (4): >> intel_iommu: Extract out vtd_cap_init to initialize cap/ecap >> 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 | 9 ++ >> include/hw/i386/intel_iommu.h | 4 + >> hw/i386/acpi-build.c | 3 +- >> hw/i386/intel_iommu.c | 287 ++++++++++++++++++++++++++------- >> 4 files changed, 245 insertions(+), 58 deletions(-) >> >> -- >> 2.34.1 >>
© 2016 - 2024 Red Hat, Inc.