From: Ben Skeggs Date: Sun, 3 Nov 2013 23:34:55 +0000 (+1000) Subject: drm/nouveau/therm: update target fanspeed outside of therm lock X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=682b1fc79399bad4d538a36bb3eb12b3ec356f03;p=linux-beck.git drm/nouveau/therm: update target fanspeed outside of therm lock Signed-off-by: Ben Skeggs --- diff --git a/drivers/gpu/drm/nouveau/core/subdev/therm/base.c b/drivers/gpu/drm/nouveau/core/subdev/therm/base.c index 29cf7bcd7b3e..21b2b3021fad 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/therm/base.c +++ b/drivers/gpu/drm/nouveau/core/subdev/therm/base.c @@ -92,8 +92,9 @@ nouveau_therm_update(struct nouveau_therm *therm, int mode) struct nouveau_timer *ptimer = nouveau_timer(therm); struct nouveau_therm_priv *priv = (void *)therm; unsigned long flags; + bool immd = true; bool poll = true; - int duty; + int duty = -1; spin_lock_irqsave(&priv->lock, flags); if (mode < 0) @@ -119,21 +120,22 @@ nouveau_therm_update(struct nouveau_therm *therm, int mode) duty = priv->cstate; poll = false; } + immd = false; break; case NOUVEAU_THERM_CTRL_NONE: default: ptimer->alarm_cancel(ptimer, &priv->alarm); poll = false; - goto done; } - nv_debug(therm, "FAN target request: %d%%\n", duty); - nouveau_therm_fan_set(therm, (mode != NOUVEAU_THERM_CTRL_AUTO), duty); - -done: if (list_empty(&priv->alarm.head) && poll) ptimer->alarm(ptimer, 1000000000ULL, &priv->alarm); spin_unlock_irqrestore(&priv->lock, flags); + + if (duty >= 0) { + nv_debug(therm, "FAN target request: %d%%\n", duty); + nouveau_therm_fan_set(therm, immd, duty); + } } int