>-----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? 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