ACPI/APEI: accept validly sized ERST on Intel systems only for now
authorJan Beulich <jbeulich@suse.com>
Thu, 18 Oct 2012 08:07:48 +0000 (10:07 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 18 Oct 2012 08:07:48 +0000 (10:07 +0200)
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>
xen/drivers/acpi/apei/erst.c

index 48fe5ae48d2beb1288f384957d12dcbfbb6b8a22..ec29eb9edb4679a4427e5189625bdd332a7ff2f5 100644 (file)
@@ -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.