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

Li, Dennis Dennis.Li at amd.com
Fri Aug 14 02:14:06 UTC 2020


[AMD Official Use Only - Internal Distribution Only]

Hi, Matt,
      With your change, I still could reproduce the following issue:

# echo "s 1 1900" > /sys/class/drm/card0/device/pp_od_clk_voltage
bash: echo: write error: Invalid argument

     I found that it is related the following lines code, could you help double check it?

	while ((sub_str = strsep(&tmp_str, delimiter)) != NULL) {  // sub_str will be empty string
		ret = kstrtol(sub_str, 0, &parameter[parameter_size]);
		if (ret)
			return -EINVAL; // return here
		parameter_size++;

		while (isspace(*tmp_str))
			tmp_str++;
	}

Best Regards
Dennis Li
-----Original Message-----
From: Matt Coffin <mcoffin13 at gmail.com> 
Sent: Friday, August 14, 2020 9:15 AM
To: amd-gfx at lists.freedesktop.org
Cc: Koenig, Christian <Christian.Koenig at amd.com>; Li, Dennis <Dennis.Li at amd.com>; Matt Coffin <mcoffin13 at gmail.com>
Subject: [PATCH] drm/amdgpu: Fix incorrect return value in sysfs for pp_od_clk_voltage

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://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.freedesktop.org%2Fdrm%2Famd%2F-%2Fissues%2F1245&data=02%7C01%7CDennis.Li%40amd.com%7C4de8308bf7974ea9e62308d83fef922b%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637329646078379799&sdata=N9c6e7cUMCDpvBIYUEzxkadJbJdBryXyfhfhb%2BUEwjg%3D&reserved=0
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