Glad to know, thanks Clement. Let me know if I can have your Tested-by.

>-----Original Message-----
>From: Clément MATHIEU--DRIF <[email protected]>
>Subject: Re: [PATCH v5 00/15] intel_iommu: Enable PASID support for passthrough
>device
>
>Hi Zhenzhong,
>
>The series passed our non-regression test suite for emulated svm.
>I will try to test upcoming versions as well.
>
>cmd
>
>On Sat, 2026-05-09 at 00:07 -0400, Zhenzhong Duan wrote:
>> Hi,
>>
>> Now we already support first stage translation with passthrough device
>> backed by nested translation in host, but only for IOMMU_NO_PASID.
>>
>> Structure VTDAddressSpace includes some elements suitable for emulated
>> device and passthrough device without PASID, e.g., address space,
>> different memory regions, etc, it is also protected by vtd iommu lock,
>> all these are useless and become a burden for passthrough device with
>> PASID.
>>
>> When there are lots of PASIDs used in one device, the AS and MRs are
>> all registered to memory core and impact the whole system performance.
>>
>> So instead of using VTDAddressSpace to cache pasid entry for each pasid
>> of a passthrough device, we define a light weight structure
>> VTDAccelPASIDCacheEntry with only necessary elements for each pasid. We
>> will use this struct as a parameter to conduct binding/unbinding to
>> nested hwpt, to record the current binded nested hwpt and even future
>> PRQ support. It's also designed to support IOMMU_NO_PASID.
>>
>> The potential full definition of VTDAccelPASIDCacheEntry may like:
>>
>>   typedef struct VTDAccelPASIDCacheEntry {
>>       VTDHostIOMMUDevice *vtd_hiod;
>>       VTDPASIDEntry pasid_entry;
>>       uint32_t pasid;
>>       uint32_t fs_hwpt_id;
>>       uint32_t fault_id;
>>       int fault_fd;
>>       QLIST_HEAD(, VTDPRQEntry) vtd_prq_list;
>>       IOMMUPRINotifier pri_notifier_entry;
>>       IOMMUPRINotifier *pri_notifier;
>>       QLIST_ENTRY(VTDAccelPASIDCacheEntry) next;
>>   } VTDAccelPASIDCacheEntry;
>>
>> Based on newest master branch.
>> GIT branch:
>[https://github.com/yiliu1765/qemu/tree/zhenzhong/iommufd_pasid.v5](https://g
>ithub.com/yiliu1765/qemu/tree/zhenzhong/iommufd_pasid.v5)
>>
>> PATCH01-08: Some preparing work
>> PATCH09-13: Handle PASID entry addition/removal and bind/unbind
>> PATCH14-15: Add PASID related check and enable PASID for passthrough device
>>
>> Tests:
>> Tested with DSA device which driver uses 2 PASIDs by default.
>>
>> Thanks
>> Zhenzhong
>>
>> Changelog:
>> v5:
>> - use %u for pasid print (Shammer)
>> - s/attachment/detachment in API doc (Shammer)
>> - save iommu pasid in vtd_as to avoid the check of PCI pasid whenever 
>> possible
>(Clement)
>> - commit log minor tweak on patch3 and patch7 (Liuyi)
>> - use name 'pasid-bits' for pasid property (Liuyi)
>>
>> v4:
>> - improve documents of VIOMMU_FLAGs (Cédric)
>> - add a cleanup patch to simplify the check between PCI pasid and VTD pasid
>(Clement)
>> - rebase to newest master branch
>>
>> v3:
>> - fix @Pasid parameter's comment (Liuyi)
>> - introduce a wrapper vtd_accel_delete_pc() (Liuyi)
>> - drop patch12 in v2 to avoid a race condition (Clement)
>> - s/PASID_0/IOMMU_NO_PASID s/gloal/global s/as_it/hiod_it (Liuyi)
>> - make trace_vtd_device_at/detach_hwpt use IOMMU_NO_PASID (Liuyi)
>> - change _accel subfix style naming to vtd_accel_ prefix style (Liuyi)
>> - drop unnecessary parameter vtd_hiod* from vtd_destroy_old_fs_hwpt() (Liuyi)
>> - introduce a new flag VIOMMU_FLAG_WANT_PASID_ATTACH for pasid attach
>(Nicolin)
>>
>> v2:
>> - move the check "s->pasid > PCI_EXT_CAP_PASID_MAX_WIDTH" to patch5
>(Clement)
>> - move #include "hw/core/iommu.h" before #include "hw/core/qdev.h" (Liuyi)
>> - polish the comment about @Pasid parameter (Liuyi)
>> - s/pe/pasid_entry, s/as_it/hiod_it, s/vtd_find_add_pc/vtd_accel_fill_pc 
>> (Liuyi)
>> - s/VTDACCELPASIDCacheEntry/VTDAccelPASIDCacheEntry (Liuyi)
>> - add explanation in code about PASID removal before addition (Liuyi)
>> - polish the comment about scope of VTDAccelPASIDCacheEntry vs
>VTDPASIDCacheEntry (Liuyi)
>> - add an optimization to bypass PASID entry addition for PASID selective
>pv_inv_dsc (Liuyi)
>>
>> v1:
>> - use naming pattern "XXX_SET_THENAME" same as smmu (Clement)
>> - fix s->pasid check (Clement)
>>
>> RFCv2:
>> - extend attach/detach_hwpt() instead of introducing new callbacks (Shammer)
>> - Define IOMMU_NO_PASID for device attachment without pasid (Nicolin)
>> - update vtd_destroy_old_fs_hwpt()'s parameter for naming consistency
>(Clement)
>> - check pasid bits size to be no more than 20 bits (Clement)
>> - initialize local variable max_pasid_log2 to 0 (Cédric)
>>
>>
>> Zhenzhong Duan (15):
>>   vfio/iommufd: Extend attach/detach_hwpt callback implementations with
>>     pasid
>>   iommufd: Extend attach/detach_hwpt callbacks to support pasid
>>   vfio/iommufd: Create nesting parent hwpt with IOMMU_HWPT_ALLOC_PASID
>>     flag
>>   intel_iommu: Create the nested hwpt with IOMMU_HWPT_ALLOC_PASID flag
>>   intel_iommu: Rename pasid property to "pasid-bits" and define it as
>>     type uint8
>>   intel_iommu: Export some functions
>>   intel_iommu: Use IOMMU_NO_PASID and delete PASID_0
>>   intel_iommu: Refactor PASID processing to use IOMMU_NO_PASID
>>     internally
>>   intel_iommu_accel: Handle PASID entry addition for pc_inv_dsc request
>>   intel_iommu_accel: Handle PASID entry removal for pc_inv_dsc request
>>   intel_iommu_accel: Bypass PASID entry addition for just deleted entry
>>   intel_iommu_accel: Handle PASID entry removal for system reset
>>   intel_iommu_accel: Switch to VTDAccelPASIDCacheEntry for PASID
>>     bind/unbind and PIOTLB invalidation
>>   intel_iommu_accel: Add pasid bits size check
>>   intel_iommu: Expose flag VIOMMU_FLAG_PASID_SUPPORTED and
>>     VIOMMU_FLAG_WANT_PASID_ATTACH
>>
>>  hw/i386/intel_iommu_accel.h    |  20 +-
>>  hw/i386/intel_iommu_internal.h |  44 +++-
>>  include/hw/core/iommu.h        |  13 ++
>>  include/hw/i386/intel_iommu.h  |   4 +-
>>  include/hw/vfio/vfio-device.h  |   1 +
>>  include/system/iommufd.h       |  18 +-
>>  include/system/memory.h        |   2 +-
>>  backends/iommufd.c             |   9 +-
>>  hw/arm/smmuv3-accel.c          |  12 +-
>>  hw/i386/intel_iommu.c          | 254 +++++++++-----------
>>  hw/i386/intel_iommu_accel.c    | 414 +++++++++++++++++++++++++++------
>>  hw/vfio/device.c               |  11 +
>>  hw/vfio/iommufd.c              |  56 +++--
>>  hw/vfio/trace-events           |   4 +-
>>  14 files changed, 607 insertions(+), 255 deletions(-)
>>

Reply via email to