RE: [PATCH v1 0/6] Check and sync host IOMMU cap/ecap with vIOMMU

Duan, Zhenzhong posted 6 patches 8 months, 3 weeks ago
Only 0 patches received!
RE: [PATCH v1 0/6] Check and sync host IOMMU cap/ecap with vIOMMU
Posted by Duan, Zhenzhong 8 months, 3 weeks ago

>-----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
>>