[PATCH] drm/amdgpu: Fix incorrect return value in sysfs for pp_od_clk_voltage

Matt Coffin mcoffin13 at gmail.com
Fri Aug 14 01:15:28 UTC 2020


The changes in edad8312cbbf9a33c86873fc4093664f150dd5c1 introduced an
issue with the sysfs interface for pp_od_clk_voltage. It overwrites the
return value to 0 when it calls another function, then returns 0. The
intended behavior is that a positive return value indicates the number
of bytes from the buffer that you processed in that call.

With the 0 return value, clients would submit the same value to be
written over and over again, resulting in an infinite loop.

This is resolved by returning the count of bytes read (in this case the
whole message), when the desired return is 0 (success).

Fixes: edad8312cbbf ("drm/amdgpu: fix system hang issue during GPU")
Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1245
Signed-off-by: Matt Coffin <mcoffin13 at gmail.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
index 1705e328c6fc..f00c7ed361d4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
@@ -937,7 +937,11 @@ static ssize_t amdgpu_set_pp_od_clk_voltage(struct device *dev,
 
 pro_end:
 	up_read(&adev->reset_sem);
-	return ret;
+	if (ret) {
+		return ret;
+	} else {
+		return count;
+	}
 }
 
 static ssize_t amdgpu_get_pp_od_clk_voltage(struct device *dev,
-- 
2.28.0



More information about the amd-gfx mailing list