drm/nouveau/therm: update target fanspeed outside of therm lock
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
Родитель
208cf0b789
Коммит
682b1fc793
|
@ -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)
|
||||||
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
|
||||||
|
|
Загрузка…
Ссылка в новой задаче