diff -ur xen-4.0.0/xen/drivers/passthrough/iommu.c xen-4.0.0.p6t/xen/drivers/passthrough/iommu.c --- xen-4.0.0/xen/drivers/passthrough/iommu.c 2010-04-07 18:12:06.000000000 +0200 +++ xen-4.0.0.p6t/xen/drivers/passthrough/iommu.c 2010-04-09 15:45:20.298264009 +0200 @@ -44,7 +44,7 @@ bool_t __read_mostly force_iommu; bool_t __read_mostly iommu_verbose; bool_t __read_mostly iommu_workaround_bios_bug; -bool_t __read_mostly iommu_passthrough; +bool_t __read_mostly iommu_passthrough = 1; bool_t __read_mostly iommu_snoop = 1; bool_t __read_mostly iommu_qinval = 1; bool_t __read_mostly iommu_intremap = 1; @@ -71,8 +71,8 @@ force_iommu = 1; else if ( !strcmp(s, "workaround_bios_bug") ) iommu_workaround_bios_bug = 1; - else if ( !strcmp(s, "passthrough") ) - iommu_passthrough = 1; + else if ( !strcmp(s, "no-passthrough") ) + iommu_passthrough = 0; else if ( !strcmp(s, "verbose") ) iommu_verbose = 1; else if ( !strcmp(s, "no-snoop") ) diff -ur xen-4.0.0/xen/drivers/passthrough/vtd/dmar.c xen-4.0.0.p6t/xen/drivers/passthrough/vtd/dmar.c --- xen-4.0.0/xen/drivers/passthrough/vtd/dmar.c 2010-04-07 18:12:06.000000000 +0200 +++ xen-4.0.0.p6t/xen/drivers/passthrough/vtd/dmar.c 2010-04-09 15:44:25.709650509 +0200 @@ -499,8 +499,7 @@ { dprintk(XENLOG_WARNING VTDPREFIX, " RMRR address range not in reserved memory " - "base = %"PRIx64" end = %"PRIx64"; " - "iommu_inclusive_mapping=1 parameter may be needed.\n", + "base = %"PRIx64" end = %"PRIx64"\n", base_addr, end_addr); } #endif @@ -559,8 +558,7 @@ dprintk(XENLOG_WARNING VTDPREFIX, " The RMRR (%"PRIx64", %"PRIx64") is incorrect!\n", rmrru->base_address, rmrru->end_address); - xfree(rmrru); - ret = -EFAULT; + acpi_register_rmrr_unit(rmrru); } else { diff -ur xen-4.0.0/xen/drivers/passthrough/vtd/x86/vtd.c xen-4.0.0.p6t/xen/drivers/passthrough/vtd/x86/vtd.c --- xen-4.0.0/xen/drivers/passthrough/vtd/x86/vtd.c 2010-04-07 18:12:06.000000000 +0200 +++ xen-4.0.0.p6t/xen/drivers/passthrough/vtd/x86/vtd.c 2010-04-09 15:44:25.709650509 +0200 @@ -27,13 +27,6 @@ #include "../dmar.h" #include "../vtd.h" -/* - * iommu_inclusive_mapping: when set, all memory below 4GB is included in dom0 - * 1:1 iommu mappings except xen and unusable regions. - */ -static int iommu_inclusive_mapping = 1; -boolean_param("iommu_inclusive_mapping", iommu_inclusive_mapping); - void *map_vtd_domain_page(u64 maddr) { return map_domain_page(maddr >> PAGE_SHIFT_4K); @@ -135,17 +128,6 @@ for ( i = 0; i < max_pfn; i++ ) { - /* - * Set up 1:1 mapping for dom0. Default to use only conventional RAM - * areas and let RMRRs include needed reserved regions. When set, the - * inclusive mapping maps in everything below 4GB except unusable - * ranges. - */ - if ( !page_is_ram_type(i, RAM_TYPE_CONVENTIONAL) && - (!iommu_inclusive_mapping || - page_is_ram_type(i, RAM_TYPE_UNUSABLE)) ) - continue; - /* Exclude Xen bits */ if ( xen_in_range(i) ) continue;