[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.4] VT-d: don't suppress invalidation address write when it is zero
commit 1db34a40ea860d11f5dec030851f3808cfd6d7ea Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Dec 15 15:47:26 2015 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Dec 15 15:47:26 2015 +0100 VT-d: don't suppress invalidation address write when it is zero GFN zero is a valid address, and hence may need invalidation done for it just like for any other GFN. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Yang Zhang <yang.z.zhang@xxxxxxxxx> master commit: 710942e57fb42ff8f344ca82f6b678f67e38ae63 master date: 2015-10-12 15:58:35 +0200 --- xen/drivers/passthrough/vtd/iommu.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index 18324ac..2036d56 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -415,7 +415,7 @@ static int flush_iotlb_reg(void *_iommu, u16 did, { struct iommu *iommu = (struct iommu *) _iommu; int tlb_offset = ecap_iotlb_offset(iommu->ecap); - u64 val = 0, val_iva = 0; + u64 val = 0; unsigned long flags; /* @@ -436,7 +436,6 @@ static int flush_iotlb_reg(void *_iommu, u16 did, switch ( type ) { case DMA_TLB_GLOBAL_FLUSH: - /* global flush doesn't need set IVA_REG */ val = DMA_TLB_GLOBAL_FLUSH|DMA_TLB_IVT; break; case DMA_TLB_DSI_FLUSH: @@ -444,8 +443,6 @@ static int flush_iotlb_reg(void *_iommu, u16 did, break; case DMA_TLB_PSI_FLUSH: val = DMA_TLB_PSI_FLUSH|DMA_TLB_IVT|DMA_TLB_DID(did); - /* Note: always flush non-leaf currently */ - val_iva = size_order | addr; break; default: BUG(); @@ -458,8 +455,11 @@ static int flush_iotlb_reg(void *_iommu, u16 did, spin_lock_irqsave(&iommu->register_lock, flags); /* Note: Only uses first TLB reg currently */ - if ( val_iva ) - dmar_writeq(iommu->reg, tlb_offset, val_iva); + if ( type == DMA_TLB_PSI_FLUSH ) + { + /* Note: always flush non-leaf currently. */ + dmar_writeq(iommu->reg, tlb_offset, size_order | addr); + } dmar_writeq(iommu->reg, tlb_offset + 8, val); /* Make sure hardware complete it */ -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.4 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |