Author: dumbbell
Date: Sun Jan 19 13:51:46 2014
New Revision: 260881
URL: http://svnweb.freebsd.org/changeset/base/260881

Log:
  MFC r255077:
  
  acpi_thermal: Warn about insane _TMP temperature only once
  
  A warning is emitted again if the temperature became briefly valid
  meanwhile. This avoids spamming the user when the sensor is broken.
  
  Other values (ie. not _TMP) always raise a warning.

Modified:
  stable/9/sys/dev/acpica/acpi_thermal.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/dev/   (props changed)

Modified: stable/9/sys/dev/acpica/acpi_thermal.c
==============================================================================
--- stable/9/sys/dev/acpica/acpi_thermal.c      Sun Jan 19 13:48:02 2014        
(r260880)
+++ stable/9/sys/dev/acpica/acpi_thermal.c      Sun Jan 19 13:51:46 2014        
(r260881)
@@ -111,6 +111,7 @@ struct acpi_tz_softc {
 
     struct acpi_tz_zone        tz_zone;        /*Thermal zone parameters*/
     int                                tz_validchecks;
+    int                                tz_insane_tmp_notified;
 
     /* passive cooling */
     struct proc                        *tz_cooling_proc;
@@ -161,6 +162,8 @@ static driver_t acpi_tz_driver = {
     sizeof(struct acpi_tz_softc),
 };
 
+static char *acpi_tz_tmp_name = "_TMP";
+
 static devclass_t acpi_tz_devclass;
 DRIVER_MODULE(acpi_tz, acpi, acpi_tz_driver, acpi_tz_devclass, 0, 0);
 MODULE_DEPEND(acpi_tz, acpi, 1, 1, 1);
@@ -456,12 +459,11 @@ acpi_tz_get_temperature(struct acpi_tz_s
 {
     int                temp;
     ACPI_STATUS        status;
-    static char        *tmp_name = "_TMP";
 
     ACPI_FUNCTION_NAME ("acpi_tz_get_temperature");
 
     /* Evaluate the thermal zone's _TMP method. */
-    status = acpi_GetInteger(sc->tz_handle, tmp_name, &temp);
+    status = acpi_GetInteger(sc->tz_handle, acpi_tz_tmp_name, &temp);
     if (ACPI_FAILURE(status)) {
        ACPI_VPRINT(sc->tz_dev, acpi_device_get_parent_softc(sc->tz_dev),
            "error fetching current temperature -- %s\n",
@@ -470,7 +472,7 @@ acpi_tz_get_temperature(struct acpi_tz_s
     }
 
     /* Check it for validity. */
-    acpi_tz_sanity(sc, &temp, tmp_name);
+    acpi_tz_sanity(sc, &temp, acpi_tz_tmp_name);
     if (temp == -1)
        return (FALSE);
 
@@ -696,10 +698,29 @@ static void
 acpi_tz_sanity(struct acpi_tz_softc *sc, int *val, char *what)
 {
     if (*val != -1 && (*val < TZ_ZEROC || *val > TZ_ZEROC + 2000)) {
-       device_printf(sc->tz_dev, "%s value is absurd, ignored (%d.%dC)\n",
-                     what, TZ_KELVTOC(*val));
+       /*
+        * If the value we are checking is _TMP, warn the user only
+        * once. This avoids spamming messages if, for instance, the
+        * sensor is broken and always returns an invalid temperature.
+        *
+        * This is only done for _TMP; other values always emit a
+        * warning.
+        */
+       if (what != acpi_tz_tmp_name || !sc->tz_insane_tmp_notified) {
+           device_printf(sc->tz_dev, "%s value is absurd, ignored (%d.%dC)\n",
+                         what, TZ_KELVTOC(*val));
+
+           /* Don't warn the user again if the read value doesn't improve. */
+           if (what == acpi_tz_tmp_name)
+               sc->tz_insane_tmp_notified = 1;
+       }
        *val = -1;
+       return;
     }
+
+    /* This value is correct. Warn if it's incorrect again. */
+    if (what == acpi_tz_tmp_name)
+       sc->tz_insane_tmp_notified = 0;
 }
 
 /*
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to