aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2007-08-12 00:12:44 -0400
committerLen Brown <len.brown@intel.com>2007-08-12 00:12:44 -0400
commitf54871456162aff557d57bec51639b1288d4a84b (patch)
treec69d646034c228c2b323ab999010a46b9084ace0
parenta70cdc5200b0eb9fc3ef64efb29baac9b2cf2431 (diff)
ACPI: thermal: create "thermal.nocrt" to disable critical actions
thermal.nocrt=1 disables actions on _CRT and _HOT ACPI thermal zone trip-points. They will be marked as <disabled> in /proc/acpi/thermal_zone/*/trip_points. There are two cases where this option is used: 1. Debugging a hot system crossing valid trip point. If your system fan is spinning at full speed, be sure that the vent is not clogged with dust. Many laptops have very fine thermal fins that are easily blocked. Check that the processor fan-sink is properly seated, has the proper thermal grease, and is really spinning. Check for fan related options in BIOS SETUP. Sometimes there is a performance vs quiet option. Defaults are generally the most conservative. If your fan is not spinning, yet /proc/acpi/fan/ has files in it, please file a Linux/ACPI bug. WARNING: you risk shortening the lifetime of your hardware if you use this parameter on a hot system. Note that this refers to all system components, including the disk drive. 2. Working around a cool system crossing critical trip point due to erroneous temperature reading. Try again with CONFIG_HWMON=n There is known potential for conflict between the the hwmon sub-system and the ACPI BIOS. If this fixes it, notify lm-sensors@lm-sensors.org and linux-acpi@vger.kernel.org Otherwise, file a Linux/ACPI bug, or notify just linux-acpi@vger.kernel.org. Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--Documentation/kernel-parameters.txt4
-rw-r--r--drivers/acpi/thermal.c18
2 files changed, 16 insertions, 6 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 52e1c2d26a25..4c7d2774d2a4 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1820,6 +1820,10 @@ and is between 256 and 4096 characters. It is defined in the file
1820 thash_entries= [KNL,NET] 1820 thash_entries= [KNL,NET]
1821 Set number of hash buckets for TCP connection 1821 Set number of hash buckets for TCP connection
1822 1822
1823 thermal.nocrt= [HW,ACPI]
1824 Set to disable actions on ACPI thermal zone
1825 critical and hot trip points.
1826
1823 thermal.off= [HW,ACPI] 1827 thermal.off= [HW,ACPI]
1824 1: disable ACPI thermal control 1828 1: disable ACPI thermal control
1825 1829
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index 74e25be8abc9..57d05ff44dd1 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -78,6 +78,10 @@ static int tzp;
78module_param(tzp, int, 0444); 78module_param(tzp, int, 0444);
79MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.\n"); 79MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.\n");
80 80
81static int nocrt;
82module_param(nocrt, int, 0);
83MODULE_PARM_DESC(nocrt, "Set to disable action on ACPI thermal zone critical and hot trips.\n");
84
81static int off; 85static int off;
82module_param(off, int, 0); 86module_param(off, int, 0);
83MODULE_PARM_DESC(off, "Set to disable ACPI thermal support.\n"); 87MODULE_PARM_DESC(off, "Set to disable ACPI thermal support.\n");
@@ -442,7 +446,7 @@ static int acpi_thermal_get_devices(struct acpi_thermal *tz)
442 446
443static int acpi_thermal_critical(struct acpi_thermal *tz) 447static int acpi_thermal_critical(struct acpi_thermal *tz)
444{ 448{
445 if (!tz || !tz->trips.critical.flags.valid) 449 if (!tz || !tz->trips.critical.flags.valid || nocrt)
446 return -EINVAL; 450 return -EINVAL;
447 451
448 if (tz->temperature >= tz->trips.critical.temperature) { 452 if (tz->temperature >= tz->trips.critical.temperature) {
@@ -464,7 +468,7 @@ static int acpi_thermal_critical(struct acpi_thermal *tz)
464 468
465static int acpi_thermal_hot(struct acpi_thermal *tz) 469static int acpi_thermal_hot(struct acpi_thermal *tz)
466{ 470{
467 if (!tz || !tz->trips.hot.flags.valid) 471 if (!tz || !tz->trips.hot.flags.valid || nocrt)
468 return -EINVAL; 472 return -EINVAL;
469 473
470 if (tz->temperature >= tz->trips.hot.temperature) { 474 if (tz->temperature >= tz->trips.hot.temperature) {
@@ -839,12 +843,14 @@ static int acpi_thermal_trip_seq_show(struct seq_file *seq, void *offset)
839 goto end; 843 goto end;
840 844
841 if (tz->trips.critical.flags.valid) 845 if (tz->trips.critical.flags.valid)
842 seq_printf(seq, "critical (S5): %ld C\n", 846 seq_printf(seq, "critical (S5): %ld C%s",
843 KELVIN_TO_CELSIUS(tz->trips.critical.temperature)); 847 KELVIN_TO_CELSIUS(tz->trips.critical.temperature),
848 nocrt ? " <disabled>\n" : "\n");
844 849
845 if (tz->trips.hot.flags.valid) 850 if (tz->trips.hot.flags.valid)
846 seq_printf(seq, "hot (S4): %ld C\n", 851 seq_printf(seq, "hot (S4): %ld C%s",
847 KELVIN_TO_CELSIUS(tz->trips.hot.temperature)); 852 KELVIN_TO_CELSIUS(tz->trips.hot.temperature),
853 nocrt ? " <disabled>\n" : "\n");
848 854
849 if (tz->trips.passive.flags.valid) { 855 if (tz->trips.passive.flags.valid) {
850 seq_printf(seq, 856 seq_printf(seq,