[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