>-----Original Message-----
>From: Clement Mathieu--Drif <[email protected]>
>Subject: Re: [RFC PATCH 04/14] intel_iommu: Create the nested hwpt with
>IOMMU_HWPT_ALLOC_PASID flag
>
>
>On Wed, 2026-02-04 at 22:11 -0500, Zhenzhong Duan wrote:
>> When pasid is enabled, any hwpt attached to non-PASID or PASID should be
>> IOMMU_HWPT_ALLOC_PASID flagged, or else attachment fails.
>>
>> Signed-off-by: Zhenzhong Duan
><[[email protected]](mailto:[email protected])>
>> ---
>>  hw/i386/intel_iommu_accel.c | 10 ++++++----
>>  1 file changed, 6 insertions(+), 4 deletions(-)
>>
>> diff --git a/hw/i386/intel_iommu_accel.c b/hw/i386/intel_iommu_accel.c
>> index 67d54849f2..d61cfec1e6 100644
>> --- a/hw/i386/intel_iommu_accel.c
>> +++ b/hw/i386/intel_iommu_accel.c
>> @@ -69,11 +69,13 @@ VTDHostIOMMUDevice
>*vtd_find_hiod_iommufd(VTDAddressSpace *as)
>>      return NULL;
>>  }
>>
>> -static bool vtd_create_fs_hwpt(HostIOMMUDeviceIOMMUFD *idev,
>> +static bool vtd_create_fs_hwpt(VTDHostIOMMUDevice *vtd_hiod,
>
>Does this change break naming consistency?

Yes, because we need to check vtd_hiod->iommu_state->pasid in 
vtd_create_fs_hwpt() but not in vtd_destroy_old_fs_hwpt().

We can change vtd_destroy_old_fs_hwpt() to also pass vtd_hiod or add a new
parameter 'iommu_state *s' to vtd_create_fs_hwpt().

>
>Other functions use use idev for HostIOMMUDeviceIOMMUFD structures

Do you see others except vtd_destroy_old_fs_hwpt()?

Thanks
Zhenzhong

>
>>                                 VTDPASIDEntry *pe, uint32_t *fs_hwpt_id,
>>                                 Error **errp)
>>  {
>> +    HostIOMMUDeviceIOMMUFD *idev =
>HOST_IOMMU_DEVICE_IOMMUFD(vtd_hiod->hiod);
>>      struct iommu_hwpt_vtd_s1 vtd = {};
>> +    uint32_t flags = vtd_hiod->iommu_state->pasid ?
>IOMMU_HWPT_ALLOC_PASID : 0;
>>
>>      vtd.flags = (VTD_SM_PASID_ENTRY_SRE(pe) ? IOMMU_VTD_S1_SRE : 0) |
>>                  (VTD_SM_PASID_ENTRY_WPE(pe) ? IOMMU_VTD_S1_WPE : 0) |
>> @@ -82,8 +84,8 @@ static bool
>vtd_create_fs_hwpt(HostIOMMUDeviceIOMMUFD *idev,
>>      vtd.pgtbl_addr = (uint64_t)vtd_pe_get_fspt_base(pe);
>>
>>      return iommufd_backend_alloc_hwpt(idev->iommufd, idev->devid, idev-
>>hwpt_id,
>> -                                      0, IOMMU_HWPT_DATA_VTD_S1, 
>> sizeof(vtd),
>> -                                      &vtd, fs_hwpt_id, errp);
>> +                                      flags, IOMMU_HWPT_DATA_VTD_S1,
>> +                                      sizeof(vtd), &vtd, fs_hwpt_id, errp);
>>  }
>>
>>  static void vtd_destroy_old_fs_hwpt(HostIOMMUDeviceIOMMUFD *idev,
>> @@ -116,7 +118,7 @@ static bool
>vtd_device_attach_iommufd(VTDHostIOMMUDevice *vtd_hiod,
>>      }
>>
>>      if (vtd_pe_pgtt_is_fst(pe)) {
>> -        if (!vtd_create_fs_hwpt(idev, pe, &hwpt_id, errp)) {
>> +        if (!vtd_create_fs_hwpt(vtd_hiod, pe, &hwpt_id, errp)) {
>>              return false;
>>          }
>>      }

Reply via email to