ACPI: thermal: create "thermal.crt=C" bootparam
Some hardware will malfunction at a temperature below the BIOS provided critical shutdown threshold. This hook allows moving the critical trip points down to a temperature which provokes a graceful shutdown before the hardware malfunction. http://bugzilla.kernel.org/show_bug.cgi?id=8884 WARNING: A trip-point override will not get noticed until the system delivers a temperature change event, or unless thermal zone polling is enabled. eg. "thermal.tzp=10" Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
3c1d36da1d
commit
c52a7419af
|
@ -1826,6 +1826,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
-1: disable all active trip points in all thermal zones
|
-1: disable all active trip points in all thermal zones
|
||||||
<degrees C>: override all lowest active trip points
|
<degrees C>: override all lowest active trip points
|
||||||
|
|
||||||
|
thermal.crt= [HW,ACPI]
|
||||||
|
-1: disable all critical trip points in all thermal zones
|
||||||
|
<degrees C>: lower all critical trip points
|
||||||
|
|
||||||
thermal.nocrt= [HW,ACPI]
|
thermal.nocrt= [HW,ACPI]
|
||||||
Set to disable actions on ACPI thermal zone
|
Set to disable actions on ACPI thermal zone
|
||||||
critical and hot trip points.
|
critical and hot trip points.
|
||||||
|
|
|
@ -79,6 +79,10 @@ static int act;
|
||||||
module_param(act, int, 0644);
|
module_param(act, int, 0644);
|
||||||
MODULE_PARM_DESC(act, "Disable or override all lowest active trip points.");
|
MODULE_PARM_DESC(act, "Disable or override all lowest active trip points.");
|
||||||
|
|
||||||
|
static int crt;
|
||||||
|
module_param(crt, int, 0644);
|
||||||
|
MODULE_PARM_DESC(crt, "Disable or lower all critical trip points.");
|
||||||
|
|
||||||
static int tzp;
|
static int tzp;
|
||||||
module_param(tzp, int, 0444);
|
module_param(tzp, int, 0444);
|
||||||
MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.");
|
MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.");
|
||||||
|
@ -340,6 +344,20 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
|
||||||
tz->trips.critical.temperature));
|
tz->trips.critical.temperature));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tz->trips.critical.flags.valid == 1) {
|
||||||
|
if (crt == -1) {
|
||||||
|
tz->trips.critical.flags.valid = 0;
|
||||||
|
} else if (crt > 0) {
|
||||||
|
unsigned long crt_k = CELSIUS_TO_KELVIN(crt);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allow override to lower critical threshold
|
||||||
|
*/
|
||||||
|
if (crt_k < tz->trips.critical.temperature)
|
||||||
|
tz->trips.critical.temperature = crt_k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Critical Sleep (optional) */
|
/* Critical Sleep (optional) */
|
||||||
|
|
||||||
status =
|
status =
|
||||||
|
|
Loading…
Reference in New Issue