[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] VT-d: prevent dom0 to use VT-d HW



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1252419031 -3600
# Node ID 1c406a505fc02569237a1da0061cf206f862f53a
# Parent  18cd7c378c4800801f13d9e3554ddbd561b62420
VT-d: prevent dom0 to use VT-d HW

pv-ops dom0 contains Linux upstream VT-d driver, and will go to enable
it when VT-d is set in kernel config file. It should not enable VT-d
in dom0.

Currently it already zaps ACPI DMAR signature to prevents dom0 using
VT-d HW when VT-d is enabled for Xen. But when VT-d is not enabled for
Xen, and VT-d is set in pv-ops kernel config file, pv-ops dom0 will go
to enable it. This will results in pv-ops dom0 booting failure. This
patch prevents dom0 to use VT-d HW whether VT-d is enabled or disabled
for Xen.

Signed-off-by: Weidong Han <weidong.han@xxxxxxxxx>
---
 xen/drivers/passthrough/vtd/dmar.c |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff -r 18cd7c378c48 -r 1c406a505fc0 xen/drivers/passthrough/vtd/dmar.c
--- a/xen/drivers/passthrough/vtd/dmar.c        Mon Sep 07 14:26:06 2009 +0100
+++ b/xen/drivers/passthrough/vtd/dmar.c        Tue Sep 08 15:10:31 2009 +0100
@@ -517,6 +517,12 @@ static int __init acpi_parse_dmar(struct
 
     dmar = (struct acpi_table_dmar *)table;
 
+    if ( !iommu_enabled )
+    {
+        ret = -EINVAL;
+        goto out;
+    }
+
     if ( !dmar->width )
     {
         dprintk(XENLOG_WARNING VTDPREFIX, "Zero: Invalid DMAR width\n");
@@ -563,9 +569,6 @@ static int __init acpi_parse_dmar(struct
         entry_header = ((void *)entry_header + entry_header->length);
     }
 
-    /* Zap APCI DMAR signature to prevent dom0 using vt-d HW. */
-    dmar->header.signature[0] = '\0';
-
     if ( ret )
     {
         if ( force_iommu )
@@ -579,6 +582,9 @@ static int __init acpi_parse_dmar(struct
         }
     }
 
+out:
+    /* Zap ACPI DMAR signature to prevent dom0 using vt-d HW. */
+    dmar->header.signature[0] = '\0';
     return ret;
 }
 
@@ -599,9 +605,6 @@ int acpi_dmar_init(void)
     if ( force_iommu )
         iommu_enabled = 1;
 
-    if ( !iommu_enabled )
-        goto fail;
-
     rc = parse_dmar_table(acpi_parse_dmar);
     if ( rc )
         goto fail;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.