aboutsummaryrefslogtreecommitdiffstats
path: root/xen/drivers/acpi
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2012-10-18 10:07:48 +0200
committerJan Beulich <jbeulich@suse.com>2012-10-18 10:07:48 +0200
commit75e578ad5b9772f52825316ed5d18fe9804dceda (patch)
tree1808a58ace4164794fdcf4b7da78c28a5c515dd7 /xen/drivers/acpi
parent2760e5c2fd8ec8a89038fdc207c1b8d0981a5a85 (diff)
downloadxen-75e578ad5b9772f52825316ed5d18fe9804dceda.tar.gz
xen-75e578ad5b9772f52825316ed5d18fe9804dceda.tar.bz2
xen-75e578ad5b9772f52825316ed5d18fe9804dceda.zip
ACPI/APEI: accept validly sized ERST on Intel systems only for now
Various AMD systems (but [unfortunately] not mine) hang when the table size check passes. Allow the check to pass on Intel systems only for now (until someone can actually debug the problem). Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/drivers/acpi')
-rw-r--r--xen/drivers/acpi/apei/erst.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/xen/drivers/acpi/apei/erst.c b/xen/drivers/acpi/apei/erst.c
index 48fe5ae48d..ec29eb9edb 100644
--- a/xen/drivers/acpi/apei/erst.c
+++ b/xen/drivers/acpi/apei/erst.c
@@ -769,6 +769,19 @@ static int __init erst_check_table(struct acpi_table_erst *erst_tab)
switch (erst_tab->header_length) {
case sizeof(*erst_tab) - sizeof(erst_tab->header):
+#ifdef CONFIG_X86
+ /* XXX
+ * While the rest of the ERST code appears to work on Intel
+ * systems with properly sized tables, various AMD systems
+ * appear to get hung (at boot time) by allowing this. Until
+ * someone with access to suitable hardware can debug this,
+ * disable the rest of the code by considering this case
+ * invalid.
+ */
+ if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
+ return -EINVAL;
+ /* fall through */
+#endif
/*
* While invalid per specification, there are (early?) systems
* indicating the full header size here, so accept that value too.