nvkm_cstate_prog() reuses 'ret' for the voltage and fan-speed restore
calls made after clock programming. As a result a clock programming
failure is silently discarded if the restore calls succeed, and
conversely a successful reclock can return an error if the final
therm/volt call fails (which is already only logged, not acted upon).

Keep the calc/prog status in 'ret' and use a local for the restore
calls, so the function reports what actually matters.

Co-Authored-By: Claude Fable 5 <[email protected]>
Signed-off-by: Francesco Magazzu <[email protected]>
---
drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
index 42f3709e0..4f08326f2 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c
@@ -199,16 +199,16 @@ nvkm_cstate_prog(struct nvkm_clk *clk, struct
nvkm_pstate *pstate, int cstatei)
}

if (volt) {
- ret = nvkm_volt_set_id(volt, cstate->voltage,
- pstate->base.voltage, clk->temp, -1);
- if (ret && ret != -ENODEV)
- nvkm_error(subdev, "failed to lower voltage: %d\n", ret);
+ int tmp = nvkm_volt_set_id(volt, cstate->voltage,
+ pstate->base.voltage, clk->temp, -1);
+ if (tmp && tmp != -ENODEV)
+ nvkm_error(subdev, "failed to lower voltage: %d\n", tmp);
}

if (therm) {
- ret = nvkm_therm_cstate(therm, pstate->fanspeed, -1);
- if (ret && ret != -ENODEV)
- nvkm_error(subdev, "failed to lower fan speed: %d\n", ret);
+ int tmp = nvkm_therm_cstate(therm, pstate->fanspeed, -1);
+ if (tmp && tmp != -ENODEV)
+ nvkm_error(subdev, "failed to lower fan speed: %d\n", tmp);
}

return ret;
-- 
2.55.0

Reply via email to