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
