From: Jan Beulich Date: Sat, 26 Mar 2011 09:30:04 +0000 (+0000) Subject: x86: fix tboot after c/s 23013:65d26504e843 (ACPI cleanup) X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5286eff6735f19f55553ee7af0d76dfb7ee8d24d;p=xen.git x86: fix tboot after c/s 23013:65d26504e843 (ACPI cleanup) 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 Tested-by: Gang Wei --- diff --git a/xen/drivers/passthrough/vtd/dmar.c b/xen/drivers/passthrough/vtd/dmar.c index d0e2877ba5..2a06eef7d8 100644 --- a/xen/drivers/passthrough/vtd/dmar.c +++ b/xen/drivers/passthrough/vtd/dmar.c @@ -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); }