>-----Original Message-----
>From: CLEMENT MATHIEU--DRIF <clement.mathieu--d...@eviden.com>
>Subject: Re: [PATCH ats_vtd v2 20/25] intel_iommu: fill the PASID field when
>creating an instance of IOMMUTLBEntry
>
>
>On 17/05/2024 12:40, Duan, Zhenzhong wrote:
>> Caution: External email. Do not open attachments or click links, unless this
>email comes from a known sender and you know the content is safe.
>>
>>
>>> -----Original Message-----
>>> From: CLEMENT MATHIEU--DRIF <clement.mathieu--d...@eviden.com>
>>> Subject: [PATCH ats_vtd v2 20/25] intel_iommu: fill the PASID field when
>>> creating an instance of IOMMUTLBEntry
>>>
>>> Signed-off-by: Clément Mathieu--Drif <clement.mathieu--
>d...@eviden.com>
>>> ---
>>> hw/i386/intel_iommu.c | 7 +++++++
>>> 1 file changed, 7 insertions(+)
>>>
>>> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
>>> index 53f17d66c0..c4ebd4569e 100644
>>> --- a/hw/i386/intel_iommu.c
>>> +++ b/hw/i386/intel_iommu.c
>>> @@ -2299,6 +2299,7 @@ out:
>>>      entry->translated_addr = vtd_get_slpte_addr(pte, s->aw_bits) &
>>> page_mask;
>>>      entry->addr_mask = ~page_mask;
>>>      entry->perm = access_flags;
>>> +    entry->pasid = pasid;
>> For PCI_NO_PASID, do we want to assign PCI_NO_PASID or rid2pasid?
>we have the following statement a few lines above :
>if (rid2pasid) {
>         pasid = VTD_CE_GET_RID2PASID(&ce);
>}
>
>so we store rid2pasid if the feature is enabled.
>
>But maybe we should store PCI_NO_PASID because the rest of the world is
>not supposed to be aware of what we are doing with rid2pasid.
>
>Does it look good to you?

Yes, that make sense.

>>
>> Thanks
>> Zhenzhong
>>
>>>      return true;
>>>
>>> error:
>>> @@ -2307,6 +2308,7 @@ error:
>>>      entry->translated_addr = 0;
>>>      entry->addr_mask = 0;
>>>      entry->perm = IOMMU_NONE;
>>> +    entry->pasid = PCI_NO_PASID;
>>>      return false;
>>> }
>>>
>>> @@ -3497,6 +3499,7 @@ static void
>>> vtd_piotlb_pasid_invalidate_notify(IntelIOMMUState *s,
>>>                  event.entry.target_as = &address_space_memory;
>>>                  event.entry.iova = notifier->start;
>>>                  event.entry.perm = IOMMU_NONE;
>>> +                event.entry.pasid = pasid;
>>>                  event.entry.addr_mask = notifier->end - notifier->start;
>>>                  event.entry.translated_addr = 0;
>>>
>>> @@ -3678,6 +3681,7 @@ static void
>>> vtd_piotlb_page_invalidate(IntelIOMMUState *s, uint16_t domain_id,
>>>              event.entry.target_as = &address_space_memory;
>>>              event.entry.iova = addr;
>>>              event.entry.perm = IOMMU_NONE;
>>> +            event.entry.pasid = pasid;
>>>              event.entry.addr_mask = size - 1;
>>>              event.entry.translated_addr = 0;
>>>
>>> @@ -4335,6 +4339,7 @@ static void
>>> do_invalidate_device_tlb(VTDAddressSpace *vtd_dev_as,
>>>      event.entry.iova = addr;
>>>      event.entry.perm = IOMMU_NONE;
>>>      event.entry.translated_addr = 0;
>>> +    event.entry.pasid = vtd_dev_as->pasid;
>>>      memory_region_notify_iommu(&vtd_dev_as->iommu, 0, event);
>>> }
>>>
>>> @@ -4911,6 +4916,7 @@ static IOMMUTLBEntry
>>> vtd_iommu_translate(IOMMUMemoryRegion *iommu, hwaddr addr,
>>>      IOMMUTLBEntry iotlb = {
>>>          /* We'll fill in the rest later. */
>>>          .target_as = &address_space_memory,
>>> +        .pasid = vtd_as->pasid,
>>>      };
>>>      bool success;
>>>
>>> @@ -4923,6 +4929,7 @@ static IOMMUTLBEntry
>>> vtd_iommu_translate(IOMMUMemoryRegion *iommu, hwaddr addr,
>>>          iotlb.translated_addr = addr & VTD_PAGE_MASK_4K;
>>>          iotlb.addr_mask = ~VTD_PAGE_MASK_4K;
>>>          iotlb.perm = IOMMU_RW;
>>> +        iotlb.pasid = PCI_NO_PASID;
>>>          success = true;
>>>      }
>>>
>>> --
>>> 2.44.0

Reply via email to