[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] VT-d code cleanup
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1227784958 0 # Node ID b1a38832be05156ac993dae1fb53b85b0aa26a1f # Parent a558165cfeada594c10598840d2d0ffd743efc21 VT-d code cleanup - remove a printk line. This printk may be output too many on some platforms, thus result in hang during dom0 booting. - add write buffer flush in domain_context_unmap_one() - when map/unmap context, if context is not flushed, needn't to flush iotlb Signed-off-by: Weidong Han <weidong.han@xxxxxxxxx> --- xen/drivers/passthrough/vtd/iommu.c | 19 ++++++++++--------- 1 files changed, 10 insertions(+), 9 deletions(-) diff -r a558165cfead -r b1a38832be05 xen/drivers/passthrough/vtd/iommu.c --- a/xen/drivers/passthrough/vtd/iommu.c Thu Nov 27 11:21:19 2008 +0000 +++ b/xen/drivers/passthrough/vtd/iommu.c Thu Nov 27 11:22:38 2008 +0000 @@ -446,10 +446,6 @@ static int flush_iotlb_reg(void *_iommu, if ( DMA_TLB_IAIG(val) == 0 ) dprintk(XENLOG_ERR VTDPREFIX, "IOMMU: flush IOTLB failed\n"); - if ( DMA_TLB_IAIG(val) != DMA_TLB_IIRG(type) ) - dprintk(XENLOG_INFO VTDPREFIX, - "IOMMU: tlb flush request %x, actual %x\n", - (u32)DMA_TLB_IIRG(type), (u32)DMA_TLB_IAIG(val)); /* flush iotlb entry will implicitly flush write buffer */ return 0; } @@ -1127,10 +1123,11 @@ static int domain_context_mapping_one( unmap_vtd_domain_page(context_entries); /* Context entry was previously non-present (with domid 0). */ - iommu_flush_context_device(iommu, 0, (((u16)bus) << 8) | devfn, - DMA_CCMD_MASK_NOBIT, 1); - if ( iommu_flush_iotlb_dsi(iommu, 0, 1) ) + if ( iommu_flush_context_device(iommu, 0, (((u16)bus) << 8) | devfn, + DMA_CCMD_MASK_NOBIT, 1) ) iommu_flush_write_buffer(iommu); + else + iommu_flush_iotlb_dsi(iommu, 0, 1); set_bit(iommu->index, &hd->iommu_bitmap); spin_unlock_irqrestore(&iommu->lock, flags); @@ -1310,8 +1307,12 @@ static int domain_context_unmap_one( context_clear_present(*context); context_clear_entry(*context); iommu_flush_cache_entry(context); - iommu_flush_context_domain(iommu, domain_iommu_domid(domain), 0); - iommu_flush_iotlb_dsi(iommu, domain_iommu_domid(domain), 0); + + if ( iommu_flush_context_domain(iommu, domain_iommu_domid(domain), 0) ) + iommu_flush_write_buffer(iommu); + else + iommu_flush_iotlb_dsi(iommu, domain_iommu_domid(domain), 0); + unmap_vtd_domain_page(context_entries); spin_unlock_irqrestore(&iommu->lock, flags); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |