Commit 3e80acd1 authored by Julian Anastasov's avatar Julian Anastasov Committed by Len Brown

ACPICA: Fix regression in FADT revision checks

	commit 64b3db22 (2.6.39),
"Remove use of unreliable FADT revision field" causes regression
for old P4 systems because now cst_control and other fields are
not reset to 0.

	The effect is that acpi_processor_power_init will notice
cst_control != 0 and a write to CST_CNT register is performed
that should not happen. As result, the system oopses after the
"No _CST, giving up" message, sometimes in acpi_ns_internalize_name,
sometimes in acpi_ns_get_type, usually at random places. May be
during migration to CPU 1 in acpi_processor_get_throttling.

	Every one of these settings help to avoid this problem:
 - acpi=off
 - processor.nocst=1
 - maxcpus=1

	The fix is to update acpi_gbl_FADT.header.length after
the original value is used to check for old revisions.

https://bugzilla.kernel.org/show_bug.cgi?id=42700
https://bugzilla.redhat.com/show_bug.cgi?id=727865Signed-off-by: default avatarJulian Anastasov <ja@ssi.bg>
Acked-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent c16fa4f2
...@@ -363,10 +363,6 @@ static void acpi_tb_convert_fadt(void) ...@@ -363,10 +363,6 @@ static void acpi_tb_convert_fadt(void)
u32 address32; u32 address32;
u32 i; u32 i;
/* Update the local FADT table header length */
acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt);
/* /*
* Expand the 32-bit FACS and DSDT addresses to 64-bit as necessary. * Expand the 32-bit FACS and DSDT addresses to 64-bit as necessary.
* Later code will always use the X 64-bit field. Also, check for an * Later code will always use the X 64-bit field. Also, check for an
...@@ -408,6 +404,10 @@ static void acpi_tb_convert_fadt(void) ...@@ -408,6 +404,10 @@ static void acpi_tb_convert_fadt(void)
acpi_gbl_FADT.boot_flags = 0; acpi_gbl_FADT.boot_flags = 0;
} }
/* Update the local FADT table header length */
acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt);
/* /*
* Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit "X" * Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit "X"
* generic address structures as necessary. Later code will always use * generic address structures as necessary. Later code will always use
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment