qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 1/4] intel_iommu: fix VTD_PAGE_MASK


From: Peter Xu
Subject: Re: [Qemu-devel] [PATCH v3 1/4] intel_iommu: fix VTD_PAGE_MASK
Date: Fri, 14 Jul 2017 12:27:15 +0800
User-agent: Mutt/1.5.24 (2015-08-30)

On Thu, Jul 13, 2017 at 04:41:32PM +0800, Jason Wang wrote:
> 
> 
> On 2017年07月12日 16:13, Peter Xu wrote:
> >IOMMUTLBEntry.iova is returned incorrectly in one PT path (though mostly
> >we cannot really trigger this path, even if we do, we are mostly
> >disgarding this value, so it didn't break anything). Fix it by
> >converting the VTD_PAGE_MASK into normal definition (normally it should
> >be pfn mask, not offset mask), then switch the other user of it.
> >
> >Fixes: b93130 ("intel_iommu: cleanup vtd_{do_}iommu_translate()")
> >Signed-off-by: Peter Xu <address@hidden>
> >---
> >  hw/i386/intel_iommu.c          | 2 +-
> >  hw/i386/intel_iommu_internal.h | 2 +-
> >  2 files changed, 2 insertions(+), 2 deletions(-)
> >
> >diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
> >index 88dc042..392da45 100644
> >--- a/hw/i386/intel_iommu.c
> >+++ b/hw/i386/intel_iommu.c
> >@@ -1141,7 +1141,7 @@ static bool vtd_do_iommu_translate(VTDAddressSpace 
> >*vtd_as, PCIBus *bus,
> >      if (vtd_ce_get_type(&ce) == VTD_CONTEXT_TT_PASS_THROUGH) {
> >          entry->iova = addr & VTD_PAGE_MASK;
> >          entry->translated_addr = entry->iova;
> >-        entry->addr_mask = VTD_PAGE_MASK;
> >+        entry->addr_mask = ~VTD_PAGE_MASK;
> >          entry->perm = IOMMU_RW;
> >          trace_vtd_translate_pt(source_id, entry->iova);
> >diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h
> >index f50ecd8..754cf8a 100644
> >--- a/hw/i386/intel_iommu_internal.h
> >+++ b/hw/i386/intel_iommu_internal.h
> >@@ -384,7 +384,7 @@ typedef struct VTDIOTLBPageInvInfo VTDIOTLBPageInvInfo;
> >  /* Pagesize of VTD paging structures, including root and context tables */
> >  #define VTD_PAGE_SHIFT              12
> >  #define VTD_PAGE_SIZE               (1ULL << VTD_PAGE_SHIFT)
> >-#define VTD_PAGE_MASK               (VTD_PAGE_SIZE - 1)
> >+#define VTD_PAGE_MASK               (~(VTD_PAGE_SIZE - 1))
> >  #define VTD_PAGE_SHIFT_4K           12
> >  #define VTD_PAGE_MASK_4K            (~((1ULL << VTD_PAGE_SHIFT_4K) - 1))
> 
> I wonder whether or not using VTD_PAGE_MASK_4K is more than enough.

Sure. Let me remove VTD_PAGE_SIZE/MASK. Thanks.

-- 
Peter Xu



reply via email to

[Prev in Thread] Current Thread [Next in Thread]