summaryrefslogtreecommitdiffstats
path: root/ACPICA-Fix-regression-in-FADT-revision-checks.patch
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@redhat.com>2012-02-27 14:21:30 -0500
committerJosh Boyer <jwboyer@redhat.com>2012-02-27 14:21:45 -0500
commit4f646f3602b25445e9e4fd1f073ea5a1f1222834 (patch)
tree63afe0a01ff91172d2ef58fd9f47692ae7e25f4e /ACPICA-Fix-regression-in-FADT-revision-checks.patch
parent53294d9ceb9b87e359096c1cafa619d2771765e5 (diff)
downloadkernel-4f646f3602b25445e9e4fd1f073ea5a1f1222834.tar.gz
kernel-4f646f3602b25445e9e4fd1f073ea5a1f1222834.tar.xz
kernel-4f646f3602b25445e9e4fd1f073ea5a1f1222834.zip
Add patch to fix regression in FADT revision checks (rhbz 730007 727865)
Diffstat (limited to 'ACPICA-Fix-regression-in-FADT-revision-checks.patch')
-rw-r--r--ACPICA-Fix-regression-in-FADT-revision-checks.patch58
1 files changed, 58 insertions, 0 deletions
diff --git a/ACPICA-Fix-regression-in-FADT-revision-checks.patch b/ACPICA-Fix-regression-in-FADT-revision-checks.patch
new file mode 100644
index 000000000..d6b590389
--- /dev/null
+++ b/ACPICA-Fix-regression-in-FADT-revision-checks.patch
@@ -0,0 +1,58 @@
+ commit 64b3db22c04586997ab4be46dd5a5b99f8a2d390 (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.
+
+Signed-off-by: Julian Anastasov <ja@ssi.bg>
+---
+ drivers/acpi/acpica/tbfadt.c | 8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c
+index c5d8704..4c9c760 100644
+--- a/drivers/acpi/acpica/tbfadt.c
++++ b/drivers/acpi/acpica/tbfadt.c
+@@ -363,10 +363,6 @@ static void acpi_tb_convert_fadt(void)
+ u32 address32;
+ 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.
+ * 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)
+ 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"
+ * generic address structures as necessary. Later code will always use
+--
+1.7.3.4
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
+the body of a message to majordomo@vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html \ No newline at end of file