>-----Original Message-----
>From: Nicolin Chen <nicol...@nvidia.com>
>Subject: Re: [PATCH v4 02/20] hw/pci: Introduce
>pci_device_get_viommu_cap()
>
>On Wed, Jul 30, 2025 at 10:51:13AM +0000, Duan, Zhenzhong wrote:
>> >> 2. there can also be more than one vIOMMUs with different user
>> >> configuration, e.g., arm smmuv3.
>
>That's correct. But would you please elaborate how different user
>configurations would benefit from this new op? I don't see a good
>reasoning behind that.
It is the reason to have get_viommu_cap(), get_viommu_cap()
returns capabilities of vIOMMU which underlying VFIO device attaches to,
but indeed, it's not reason for leaving out host capabilities, I'll drop this
line.
>
>> >> 4. It's too late for VFIO to call get_viommu_cap() after
>set_iommu_device()
>> >> because we need get_viommu_cap() to determine if creating
>nested
>> >parent
>> >> hwpt or not at attaching stage, meanwhile hiod realize needs
>> >iommufd,
>> >
>> >hiod -> "host IOMMU device"
>>
>> Will do.
>>
>> >
>> >> devid and hwpt_id which are ready after attach_device().
>> >
>> >I find the above sentence difficult to understand.
>>
>> This is trying to explain the reason of order between attach_device(),
>get_viommu_cap() and hiod realizing.
>> What about:
>>
>> 4. host IOMMU capabilities are passed to vIOMMU through
>set_iommu_device()
>> interface which have to be after attach_device(), when
>get_viommu_cap()
>> is called in attach_device(), there is no way for vIOMMU to get host
>> IOMMU capabilities yet, so only emulated capabilities can be returned.
>> See below sequence:
>>
>> attach_device()
>> get_viommu_cap()
>> create hwpt
>> ...
>> vfio_device_hiod_create_and_realize()
>> set_iommu_device(hiod)
>
>I think it should be:
>
> vfio_device_attach():
> iommufd_cdev_attach():
> pci_device_get_viommu_cap() for HW nesting cap
> create a nesting parent hwpt
> attach device to the hwpt
> vfio_device_hiod_create_and_realize() creating hiod
> ...
> pci_device_set_iommu_device(hiod)
Good catch, done,
https://github.com/yiliu1765/qemu/commit/34b02bdc0d615c60d1b07bfee842aabf1f7e2b28
Thanks
Zhenzhong