From 75e578ad5b9772f52825316ed5d18fe9804dceda Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Thu, 18 Oct 2012 10:07:48 +0200 Subject: [PATCH] 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 Acked-by: Keir Fraser --- xen/drivers/acpi/apei/erst.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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. -- 2.30.2