drm/nouveau/therm: force a minimum hysteresis on temperature alarm thresholds
authorMartin Peres <martin.peres@labri.fr>
Sat, 8 Dec 2012 13:00:38 +0000 (14:00 +0100)
committerBen Skeggs <bskeggs@redhat.com>
Wed, 20 Feb 2013 06:00:30 +0000 (16:00 +1000)
This should avoid the situation where a user gets its kernel logs flooded when
temperature oscillates around a threshold with 0°C hysteresis.

This patch is just meant to fix broken vbios (as reported on a nv4e on
sysfs hwmon interface.

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/core/subdev/therm/temp.c

index 820e09706578ebfea13c68694e5ef95577bae3f1..bf9b3cefb5149a5e0888e276a48299aa8ebccdd2 100644 (file)
@@ -58,11 +58,18 @@ static void
 nouveau_therm_temp_safety_checks(struct nouveau_therm *therm)
 {
        struct nouveau_therm_priv *priv = (void *)therm;
+       struct nvbios_therm_sensor *s = &priv->bios_sensor;
 
        if (!priv->bios_sensor.slope_div)
                priv->bios_sensor.slope_div = 1;
        if (!priv->bios_sensor.offset_den)
                priv->bios_sensor.offset_den = 1;
+
+       /* enforce a minimum hysteresis on thresholds */
+       s->thrs_fan_boost.hysteresis = max_t(u8, s->thrs_fan_boost.hysteresis, 2);
+       s->thrs_down_clock.hysteresis = max_t(u8, s->thrs_down_clock.hysteresis, 2);
+       s->thrs_critical.hysteresis = max_t(u8, s->thrs_critical.hysteresis, 2);
+       s->thrs_shutdown.hysteresis = max_t(u8, s->thrs_shutdown.hysteresis, 2);
 }
 
 /* must be called with alarm_program_lock taken ! */