]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/xen.git/commitdiff
x86: fix tboot after c/s 23013:65d26504e843 (ACPI cleanup)
authorJan Beulich <jbeulich@novell.com>
Sat, 26 Mar 2011 09:30:04 +0000 (09:30 +0000)
committerJan Beulich <jbeulich@novell.com>
Sat, 26 Mar 2011 09:30:04 +0000 (09:30 +0000)
TXT code calls acpi_parse_dmar() with a transient copy of the DMAR
table, and hence storing the pointer for later reference was wrong.
Obtain the pointer in acpi_dmar_init() instead.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
Tested-by: Gang Wei <gang.wei@intel.com>
xen/drivers/passthrough/vtd/dmar.c

index d0e2877ba547bf53a616b3aa11203be9ff1545a6..2a06eef7d89689481b88956991ce62a24d643e63 100644 (file)
@@ -673,7 +673,6 @@ static int __init acpi_parse_dmar(struct acpi_table_header *table)
     u8 dmar_host_address_width;
     int ret = 0;
 
-    dmar_table = table;
     dmar = (struct acpi_table_dmar *)table;
 
     if ( !iommu_enabled )
@@ -762,6 +761,13 @@ out:
 
 int __init acpi_dmar_init(void)
 {
+    unsigned long flags;
+
+    /* Disabling IRQs avoids cross-CPU TLB flush in map_pages_to_xen(). */
+    local_irq_save(flags);
+    acpi_get_table(ACPI_SIG_DMAR, 0, &dmar_table);
+    local_irq_restore(flags);
+
     return parse_dmar_table(acpi_parse_dmar);
 }