
From: Thomas Rosner <kernel-bugs@digital-trauma.de>

This adds all known BIOS versions of IBM R40e Laptops to the C2/C3
processor state blacklist and thus prevents them from crashing.  Fixes Bug
#3549.

Implementation is probably overly verbose, but DMI_MATCH seems to give us
no choice.

Signed-off-by: Thomas Rosner <kernel-bugs@digital-trauma.de>
Cc: <linux-acpi@intel.com>
Cc: "Brown, Len" <len.brown@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 drivers/acpi/processor_idle.c |  109 ++++++++++++++++++++++++++++++++++++------
 1 files changed, 95 insertions(+), 14 deletions(-)

diff -puN drivers/acpi/processor_idle.c~acpi-disable-c2-c3-for-_all_-ibm-r40e-laptops-for-2613-bug-3549 drivers/acpi/processor_idle.c
--- devel/drivers/acpi/processor_idle.c~acpi-disable-c2-c3-for-_all_-ibm-r40e-laptops-for-2613-bug-3549	2005-09-15 20:56:35.000000000 -0700
+++ devel-akpm/drivers/acpi/processor_idle.c	2005-09-15 21:02:15.000000000 -0700
@@ -94,23 +94,104 @@ static int set_max_cstate(struct dmi_sys
 }
 
 static struct dmi_system_id __initdata processor_power_dmi_table[] = {
+	/* The known versions of IBM R40e BIOS */
 	{set_max_cstate, "IBM ThinkPad R40e", {
-					       DMI_MATCH(DMI_BIOS_VENDOR,
-							 "IBM"),
-					       DMI_MATCH(DMI_BIOS_VERSION,
-							 "1SET60WW")},
-	 (void *)1},
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET32WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET43WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET45WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET47WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET50WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET52WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET55WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET56WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET59WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET60WW")},
+			(void *)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET61WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET62WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET64WW") },
+			(void*)1},
+	{set_max_cstate, "IBM ThinkPad R40e", {
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"IBM"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"1SET65WW") },
+			(void*)1},
+	/* Other laptops, same problem */
 	{set_max_cstate, "Medion 41700", {
-					  DMI_MATCH(DMI_BIOS_VENDOR,
-						    "Phoenix Technologies LTD"),
-					  DMI_MATCH(DMI_BIOS_VERSION,
-						    "R01-A1J")}, (void *)1},
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"Phoenix Technologies LTD"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"R01-A1J")},
+			(void *)1},
 	{set_max_cstate, "Clevo 5600D", {
-					 DMI_MATCH(DMI_BIOS_VENDOR,
-						   "Phoenix Technologies LTD"),
-					 DMI_MATCH(DMI_BIOS_VERSION,
-						   "SHE845M0.86C.0013.D.0302131307")},
-	 (void *)2},
+			DMI_MATCH(DMI_BIOS_VENDOR,
+				"Phoenix Technologies LTD"),
+			DMI_MATCH(DMI_BIOS_VERSION,
+				"SHE845M0.86C.0013.D.0302131307")},
+			(void *)2},
 	{},
 };
 
_
