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.
This commit is contained in:
parent
89a53411d4
commit
b8833944fd
@ -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_softc *sc)
|
||||
{
|
||||
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_softc *sc)
|
||||
}
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user