[RFC] Patch to enable temperature ceiling in powerd
Hajimu UMEMOTO
ume at freebsd.org
Sat Feb 16 03:12:10 UTC 2008
Hi,
>>>>> On Fri, 15 Feb 2008 20:41:10 -0500
>>>>> "Alexandre \"Sunny\" Kovalenko" <alex.kovalenko at verizon.net> said:
alex> Thank you very much for pointing me in the right direction -- my system
alex> (ThinkPad X60 1709-73U) does provide _TSP, _TC1 and _TC2, just not in
alex> the tz0. All of that lives in tz1 and works perfectly -- as the matter
alex> of fact I am writing this E-mail after setting
alex> hw.acpi.thermal.tz1.passive_cooling: 1
alex> hw.acpi.thermal.user_override: 1
alex> hw.acpi.thermal.tz1._PSV: 55.0C
The current implementation attempts to enable passive cooling just for
tz0. Could you try the following patch? It should enable passive
cooling for tz1 on your laptop.
Index: sys/dev/acpica/acpi_thermal.c
diff -u -p sys/dev/acpica/acpi_thermal.c.orig sys/dev/acpica/acpi_thermal.c
--- sys/dev/acpica/acpi_thermal.c.orig Wed Aug 23 21:29:55 2006
+++ sys/dev/acpica/acpi_thermal.c Mon Aug 28 00:35:49 2006
@@ -172,6 +172,8 @@ static int acpi_tz_override;
static struct proc *acpi_tz_proc;
ACPI_LOCK_DECL(thermal, "ACPI thermal zone");
+static int acpi_tz_cooling_unit = -1;
+
static int
acpi_tz_probe(device_t dev)
{
@@ -205,17 +207,7 @@ acpi_tz_attach(device_t dev)
sc->tz_cooling_proc_running = FALSE;
sc->tz_cooling_active = FALSE;
sc->tz_cooling_updated = FALSE;
-
- /*
- * Always attempt to enable passive cooling for tz0. Users can enable
- * it for other zones manually for now.
- *
- * XXX We need to test if multiple zones conflict with each other
- * since cpufreq currently sets all CPUs to the given frequency whereas
- * it's possible for different thermal zones to specify independent
- * settings for multiple CPUs.
- */
- sc->tz_cooling_enabled = (device_get_unit(dev) == 0);
+ sc->tz_cooling_enabled = FALSE;
/*
* Parse the current state of the thermal zone and build control
@@ -309,16 +301,25 @@ acpi_tz_attach(device_t dev)
}
}
- /* Create a thread to handle passive cooling for each zone if enabled. */
+ /*
+ * Create a thread to handle passive cooling for 1st zone which
+ * has _PSV, _TSP, _TC1 and _TC2. Users can enable it for other
+ * zones manually for now.
+ *
+ * XXX We enable only one zone to avoid multiple zones conflict
+ * with each other since cpufreq currently sets all CPUs to the
+ * given frequency whereas it's possible for different thermal
+ * zones to specify independent settings for multiple CPUs.
+ */
+ if (acpi_tz_cooling_unit < 0 && acpi_tz_cooling_is_available(sc))
+ sc->tz_cooling_enabled = TRUE;
if (sc->tz_cooling_enabled) {
- if (acpi_tz_cooling_is_available(sc)) {
- error = acpi_tz_cooling_thread_start(sc);
- if (error != 0) {
- sc->tz_cooling_enabled = FALSE;
- goto out;
- }
- } else
+ error = acpi_tz_cooling_thread_start(sc);
+ if (error != 0) {
sc->tz_cooling_enabled = FALSE;
+ goto out;
+ }
+ acpi_tz_cooling_unit = device_get_unit(dev);
}
/*
Sincerely,
--
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
ume at mahoroba.org ume@{,jp.}FreeBSD.org
http://www.imasy.org/~ume/
More information about the freebsd-acpi
mailing list