|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] x86: fix tboot after c/s 23013:65d26504e8
# HG changeset patch
# User Jan Beulich <jbeulich@xxxxxxxxxx>
# Date 1301131804 0
# Node ID dd386a4b6595e1ee63acb7220f8884b7a8532b99
# Parent ef8dd40422c8e238ac4d4745c1bb2ecfb55ed3ca
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 <jbeulich@xxxxxxxxxx>
Tested-by: Gang Wei <gang.wei@xxxxxxxxx>
---
diff -r ef8dd40422c8 -r dd386a4b6595 xen/drivers/passthrough/vtd/dmar.c
--- a/xen/drivers/passthrough/vtd/dmar.c Sat Mar 26 08:27:41 2011 +0000
+++ b/xen/drivers/passthrough/vtd/dmar.c Sat Mar 26 09:30:04 2011 +0000
@@ -673,7 +673,6 @@
u8 dmar_host_address_width;
int ret = 0;
- dmar_table = table;
dmar = (struct acpi_table_dmar *)table;
if ( !iommu_enabled )
@@ -762,6 +761,13 @@
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);
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] x86: fix tboot after c/s 23013:65d26504e843 (ACPI cleanup),
Xen patchbot-unstable <=
|
|
|
|
|