[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] vtd: Enable pass-through translation for Dom0
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1220968229 -3600 # Node ID 5ce9459ce8722a8af89da5a73b0c80a767d5b1ad # Parent d57e9b29858bddf4651efb002cfdadf978da79c0 vtd: Enable pass-through translation for Dom0 If pass-through field in extended capability register is set, set pass-through translation type for Dom0, that means DMA requests with Untranslated addresses are processed as pass-through in Dom0, needn't translate DMA requests through a multi-level page-table. Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx> Signed-off-by: Weidong Han <weidong.han@xxxxxxxxx> --- xen/drivers/passthrough/vtd/iommu.c | 13 ++++++------- 1 files changed, 6 insertions(+), 7 deletions(-) diff -r d57e9b29858b -r 5ce9459ce872 xen/drivers/passthrough/vtd/iommu.c --- a/xen/drivers/passthrough/vtd/iommu.c Tue Sep 09 14:47:36 2008 +0100 +++ b/xen/drivers/passthrough/vtd/iommu.c Tue Sep 09 14:50:29 2008 +0100 @@ -1090,12 +1090,12 @@ static int domain_context_mapping_one( } spin_lock_irqsave(&iommu->lock, flags); - -#ifdef CONTEXT_PASSTHRU if ( ecap_pass_thru(iommu->ecap) && (domain->domain_id == 0) ) + { context_set_translation_type(*context, CONTEXT_TT_PASS_THRU); + agaw = level_to_agaw(iommu->nr_pt_levels); + } else -#endif { /* Ensure we have pagetables allocated down to leaf PTE. */ if ( hd->pgd_maddr == 0 ) @@ -1459,11 +1459,12 @@ int intel_iommu_map_page( u64 pg_maddr; int pte_present; -#ifdef CONTEXT_PASSTHRU + drhd = list_entry(acpi_drhd_units.next, typeof(*drhd), list); + iommu = drhd->iommu; + /* do nothing if dom0 and iommu supports pass thru */ if ( ecap_pass_thru(iommu->ecap) && (d->domain_id == 0) ) return 0; -#endif pg_maddr = addr_to_dma_page_maddr(d, (paddr_t)gfn << PAGE_SHIFT_4K, 1); if ( pg_maddr == 0 ) @@ -1500,11 +1501,9 @@ int intel_iommu_unmap_page(struct domain drhd = list_entry(acpi_drhd_units.next, typeof(*drhd), list); iommu = drhd->iommu; -#ifdef CONTEXT_PASSTHRU /* do nothing if dom0 and iommu supports pass thru */ if ( ecap_pass_thru(iommu->ecap) && (d->domain_id == 0) ) return 0; -#endif dma_pte_clear_one(d, (paddr_t)gfn << PAGE_SHIFT_4K); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |