http://bugzilla.kernel.org/show_bug.cgi?id=10454
------- Comment #15 from [EMAIL PROTECTED] 2008-04-25 14:19 ------- (In reply to comment #5) > Linux should NEVER load such a table, maybe that piece of memory is not a > table > at all. I just did look up the "Load" command in the ACPI spec and it says: ...The Definition Block should contain an ACPI DESCRIPTION_HEADER of type SSDT... unfortunately the ACPI spec does not contain a definition for the words should and must but it seems to be weaker than the ... Checksum ... Entire table must sum to zero... but linux ignores wrong checksums. So perhaps something like the following which allows empty signatures in the "Load" command might be a solution: diff --git a/drivers/acpi/executer/exconfig.c b/drivers/acpi/executer/exconfig.c --- a/drivers/acpi/executer/exconfig.c +++ b/drivers/acpi/executer/exconfig.c @@ -370,7 +370,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc, /* * Install the new table into the local data structures */ - status = acpi_tb_add_table(&table_desc, &table_index); + status = acpi_tb_add_table_no_signature(&table_desc, &table_index); if (ACPI_FAILURE(status)) { goto cleanup; } diff --git a/drivers/acpi/tables/tbinstal.c b/drivers/acpi/tables/tbinstal.c --- a/drivers/acpi/tables/tbinstal.c +++ b/drivers/acpi/tables/tbinstal.c @@ -107,8 +107,8 @@ acpi_status acpi_tb_verify_table(struct acpi_table_desc *table_desc) ******************************************************************************/ acpi_status -acpi_tb_add_table(struct acpi_table_desc *table_desc, - acpi_native_uint * table_index) +acpi_tb_add_table_real(struct acpi_table_desc *table_desc, + acpi_native_uint * table_index, int strict_signature_check) { acpi_native_uint i; acpi_native_uint length; @@ -125,9 +125,9 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc, /* The table must be either an SSDT or a PSDT or an OEMx */ - if (table_desc->pointer->signature[0] == '\0') { - ACPI_ERROR((AE_INFO, - "Table has empty signature, probably VIST table, correcting")); + if (!strict_signature_check && table_desc->pointer->signature[0] == '\0') { + ACPI_DEBUG_PRINT((ACPI_DB_TABLES, + "Table has empty signature, no strict signature check requested, correcting")); strncpy(table_desc->pointer->signature, "SSDT", 4); } @@ -196,6 +196,21 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc, return_ACPI_STATUS(status); } +acpi_status +acpi_tb_add_table(struct acpi_table_desc *table_desc, + acpi_native_uint * table_index) +{ + return acpi_tb_add_table_real(table_desc, table_index, 1); +} + +acpi_status +acpi_tb_add_table_no_signature(struct acpi_table_desc *table_desc, + acpi_native_uint * table_index) +{ + return acpi_tb_add_table_real(table_desc, table_index, 0); +} + + /******************************************************************************* * * FUNCTION: acpi_tb_resize_root_table_list diff --git a/include/acpi/actables.h b/include/acpi/actables.h --- a/include/acpi/actables.h +++ b/include/acpi/actables.h @@ -73,6 +73,10 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc, acpi_native_uint * table_index); acpi_status +acpi_tb_add_table_no_signature(struct acpi_table_desc *table_desc, + acpi_native_uint * table_index); + +acpi_status acpi_tb_store_table(acpi_physical_address address, struct acpi_table_header *table, u32 length, u8 flags, acpi_native_uint * table_index); -- Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ acpi-bugzilla mailing list acpi-bugzilla@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla