VT-d code cleanup
PATCH 1/1 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 <[email protected]>
xen/drivers/passthrough/vtd/iommu.c +10 -9
@@ -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 ; }
@@ -1125,10 +1121,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);
@@ -1308,8 +1305,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-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel
PATCH 1/1 VT-d code cleanup
This patch narrow context caching flush range from the domain-selective to the device-selective, when unmapping a device.
Signed-off-by Yu Zhao <[email protected]>
xen/drivers/passthrough/vtd/iommu.c +3 -1
@@ -1308,7 +1308,9 @@context_clear_entry (*context);iommu_flush_cache_entry (context); -if (iommu_flush_context_domain (iommu,domain_iommu_domid (domain),0 ) ) +if (iommu_flush_context_device (iommu,domain_iommu_domid (domain), + (((u16 )bus) <<8 ) | devfn, +DMA_CCMD_MASK_NOBIT ,0 ) )iommu_flush_write_buffer (iommu);else iommu_flush_iotlb_dsi (iommu,domain_iommu_domid (domain),0 );
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel