>-----Original Message----- >From: Eric Auger <eric.au...@redhat.com> >Subject: Re: [PATCH v7 00/17] Add a host IOMMU device abstraction to >check with vIOMMU > >Hi Zhenzhong, > >On 6/5/24 10:30, Zhenzhong Duan wrote: >> Hi, >> >> This series introduce a HostIOMMUDevice abstraction and sub-classes. >> Also HostIOMMUDeviceCaps structure in HostIOMMUDevice and a new >interface >> between vIOMMU and HostIOMMUDevice. >> >> A HostIOMMUDevice is an abstraction for an assigned device that is >protected >> by a physical IOMMU (aka host IOMMU). The userspace interaction with >this >> physical IOMMU can be done either through the VFIO IOMMU type 1 >legacy >> backend or the new iommufd backend. The assigned device can be a VFIO >device >> or a VDPA device. The HostIOMMUDevice is needed to interact with the >host >> IOMMU that protects the assigned device. It is especially useful when the >> device is also protected by a virtual IOMMU as this latter use the >translation >> services of the physical IOMMU and is constrained by it. In that context the >> HostIOMMUDevice can be passed to the virtual IOMMU to collect physical >IOMMU >> capabilities such as the supported address width. In the future, the virtual >> IOMMU will use the HostIOMMUDevice to program the guest page tables >in the >> first translation stage of the physical IOMMU. >> >> HostIOMMUDeviceClass::realize() is introduced to initialize >> HostIOMMUDeviceCaps and other fields of HostIOMMUDevice variants. >> >> HostIOMMUDeviceClass::get_cap() is introduced to query host IOMMU >> device capabilities. >> >> The class tree is as below: >> >> HostIOMMUDevice >> | .caps >> | .realize() >> | .get_cap() >> | >> .-----------------------------------------------. >> | | | >> HostIOMMUDeviceLegacyVFIO {HostIOMMUDeviceLegacyVDPA} >HostIOMMUDeviceIOMMUFD >> | | | [.iommufd] >> | [.devid] >> | [.ioas_id] >> | >> [.attach_hwpt()] >> | >> [.detach_hwpt()] >> | >> .----------------------. >> | | >> HostIOMMUDeviceIOMMUFDVFIO >{HostIOMMUDeviceIOMMUFDVDPA} >> | [.vdev] | {.vdev} >> >> * The attributes in [] will be implemented in nesting series. >> * The classes in {} will be implemented in future. >> * .vdev in different class points to different agent device, >> * i.e., VFIODevice or VDPADevice. >> >> PATCH1-4: Introduce HostIOMMUDevice and its sub classes >> PATCH5-10: Implement .realize() and .get_cap() handler >> PATCH11-14: Create HostIOMMUDevice instance and pass to vIOMMU >> PATCH15-17: Implement compatibility check between host IOMMU and >vIOMMU(intel_iommu) >> >> Test done: >> make check >> vfio device hotplug/unplug with different backend on linux >> reboot, kexec >> build test on linux and windows11 >> >> Qemu code can be found at: >> >https://github.com/yiliu1765/qemu/tree/zhenzhong/iommufd_nesting_pre >q_v7 >> >> Besides the compatibility check in this series, in nesting series, this >> host IOMMU device is extended for much wider usage. For anyone >interested >> on the nesting series, here is the link: >> >https://github.com/yiliu1765/qemu/tree/zhenzhong/iommufd_nesting_rfc >v2 >> >> Thanks >> Zhenzhong >> >> Changelog: >> v7: >> - drop config CONFIG_HOST_IOMMU_DEVICE (Cédric) >> - introduce HOST_IOMMU_DEVICE_CAP_AW_BITS_MAX (Eric) >> - use iova_ranges method in iommufd.realize() (Eric) >> - introduce HostIOMMUDevice::name to facilitate tracing (Eric) >> - implement a custom destroy hash function (Cédric) >> - drop VTDHostIOMMUDevice and save HostIOMMUDevice in hash table >(Eric) >> - move patch5 after patch1 (Eric) >> - squash patch3 and 4, squash patch12 and 13 (Eric) >> - refine comments (Eric) >> - collect Eric's R-B > >for the whole series: >Reviewed-by: Eric Auger <eric.au...@redhat.com>
Thanks Eric. > >I exercised part of it using the virtio-iommu and this series on top >[RFC v2 0/7] VIRTIO-IOMMU/VFIO: Fix host iommu geometry handling for >hotplugged devices You are super-efficient😊 BRs. Zhenzhong