>-----Original Message----- >From: Eric Auger <eric.au...@redhat.com> >Subject: Re: [PATCH v3 09/20] intel_iommu: Introduce two helpers >vtd_as_from/to_iommu_pasid_locked > >Hi Zhenzhong, > >On 7/8/25 1:05 PM, Zhenzhong Duan wrote: >> PCI device supports two request types, Requests-without-PASID and >> Requests-with-PASID. Requests-without-PASID doesn't include a PASID TLP >> prefix, IOMMU fetches rid_pasid from context entry and use it as IOMMU's >> pasid to index pasid table. >> >> So we need to translate between PCI's pasid and IOMMU's pasid specially >> for Requests-without-PASID, e.g., PCI_NO_PASID(-1) <-> rid_pasid. >> For Requests-with-PASID, PCI's pasid and IOMMU's pasid are same value. >> >> vtd_as_from_iommu_pasid_locked() translates from BDF+iommu_pasid to >vtd_as >> which contains PCI's pasid vtd_as->pasid. >> >> vtd_as_to_iommu_pasid_locked() translates from BDF+vtd_as->pasid to >iommu_pasid. >> >> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> >> --- >> hw/i386/intel_iommu.c | 58 >+++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 58 insertions(+) >> >> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c >> index 15f4393d6f..38e7f7b7be 100644 >> --- a/hw/i386/intel_iommu.c >> +++ b/hw/i386/intel_iommu.c >> @@ -1602,6 +1602,64 @@ static int >vtd_dev_to_context_entry(IntelIOMMUState *s, uint8_t bus_num, >> return 0; >> } >> >> +static int vtd_as_to_iommu_pasid_locked(VTDAddressSpace *vtd_as, >> + uint32_t *pasid) >> +{ >> + VTDContextCacheEntry *cc_entry = &vtd_as->context_cache_entry; >> + IntelIOMMUState *s = vtd_as->iommu_state; >> + uint8_t bus_num = pci_bus_num(vtd_as->bus); >> + uint8_t devfn = vtd_as->devfn; >> + VTDContextEntry ce; >> + int ret; >> + >> + if (cc_entry->context_cache_gen == s->context_cache_gen) { >> + ce = cc_entry->context_entry; >> + } else { >> + ret = vtd_dev_to_context_entry(s, bus_num, devfn, &ce); >> + if (ret) { >> + return ret; >you need to retrieve the ce only if vtd_as->pasid. So this can be moved >to the conditional block below.
Good idea! Will do. Thanks Zhenzhong