Commit 682b1fc7 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/therm: update target fanspeed outside of therm lock

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 208cf0b7
...@@ -92,8 +92,9 @@ nouveau_therm_update(struct nouveau_therm *therm, int mode) ...@@ -92,8 +92,9 @@ nouveau_therm_update(struct nouveau_therm *therm, int mode)
struct nouveau_timer *ptimer = nouveau_timer(therm); struct nouveau_timer *ptimer = nouveau_timer(therm);
struct nouveau_therm_priv *priv = (void *)therm; struct nouveau_therm_priv *priv = (void *)therm;
unsigned long flags; unsigned long flags;
bool immd = true;
bool poll = true; bool poll = true;
int duty; int duty = -1;
spin_lock_irqsave(&priv->lock, flags); spin_lock_irqsave(&priv->lock, flags);
if (mode < 0) if (mode < 0)
...@@ -119,21 +120,22 @@ nouveau_therm_update(struct nouveau_therm *therm, int mode) ...@@ -119,21 +120,22 @@ nouveau_therm_update(struct nouveau_therm *therm, int mode)
duty = priv->cstate; duty = priv->cstate;
poll = false; poll = false;
} }
immd = false;
break; break;
case NOUVEAU_THERM_CTRL_NONE: case NOUVEAU_THERM_CTRL_NONE:
default: default:
ptimer->alarm_cancel(ptimer, &priv->alarm); ptimer->alarm_cancel(ptimer, &priv->alarm);
poll = false; 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) if (list_empty(&priv->alarm.head) && poll)
ptimer->alarm(ptimer, 1000000000ULL, &priv->alarm); ptimer->alarm(ptimer, 1000000000ULL, &priv->alarm);
spin_unlock_irqrestore(&priv->lock, flags); 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 int
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment