ACPI: Fix x86 regression related to early mapping size limitation
[linux-2.6-block.git] / drivers / acpi / tables.c
index 21782290df41f3383140667edffbdddbb2ec1ae7..05550ba44d32ba59dba6cea489dc622965cc9692 100644 (file)
@@ -44,6 +44,12 @@ static struct acpi_table_desc initial_tables[ACPI_MAX_TABLES] __initdata;
 
 static int acpi_apic_instance __initdata;
 
+/*
+ * Disable table checksum verification for the early stage due to the size
+ * limitation of the current x86 early mapping implementation.
+ */
+static bool acpi_verify_table_checksum __initdata = false;
+
 void acpi_table_print_madt_entry(struct acpi_subtable_header *header)
 {
        if (!header)
@@ -333,6 +339,14 @@ int __init acpi_table_init(void)
 {
        acpi_status status;
 
+       if (acpi_verify_table_checksum) {
+               pr_info("Early table checksum verification enabled\n");
+               acpi_gbl_verify_table_checksum = TRUE;
+       } else {
+               pr_info("Early table checksum verification disabled\n");
+               acpi_gbl_verify_table_checksum = FALSE;
+       }
+
        status = acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0);
        if (ACPI_FAILURE(status))
                return -EINVAL;
@@ -354,3 +368,12 @@ static int __init acpi_parse_apic_instance(char *str)
 }
 
 early_param("acpi_apic_instance", acpi_parse_apic_instance);
+
+static int __init acpi_force_table_verification_setup(char *s)
+{
+       acpi_verify_table_checksum = true;
+
+       return 0;
+}
+
+early_param("acpi_force_table_verification", acpi_force_table_verification_setup);