On 01-Jun-26 1:15 PM, Wang, Yang(Kevin) wrote:
AMD General
Hi Asad,
Your patch doesn't seem to resolve the issue you're facing; I think the
correct logic should check the return value and the size variable
What's your opinion?
I think stop printing if buffer is full seems sufficient.
The expectation is that size out param shouldn't be updated if the
function returns failure.
Thanks,
Lijo
Here is the pseudocode:
ret = amdgpu_dpm_emit_clock_levels(adev, od_clocks[clk_index], buf, &size);
if (ret < 0) {
continue; // for next clock item.
} else if (ret == 0) {
// Check ret and size/PAGE_SIZE here to meet the requirements
} else {
// go out to return.
}
Best Regards,
Kevin
-----Original Message-----
From: Kamal, Asad <[email protected]>
Sent: Friday, May 29, 2026 11:54 PM
To: [email protected]
Cc: Lazar, Lijo <[email protected]>; Zhang, Hawking
<[email protected]>; Ma, Le <[email protected]>; Zhang, Morris
<[email protected]>; Deucher, Alexander
<[email protected]>; Wang, Yang(Kevin)
<[email protected]>; Kamal, Asad <[email protected]>
Subject: [PATCH v2] drm/amd/pm: Stop pp_od_clk_voltage emit at PAGE_SIZE
Stop appending OD sections in amdgpu_get_pp_od_clk_voltage() once the
sysfs page is full, instead of checking every
sysfs_emit_at() in SMU helpers
v2: Drop the prior series that checked sysfs_emit_at() return values in every
SMU *_emit_clk_levels() helper and smu_cmn_print_*().
(Kevin)
Signed-off-by: Asad Kamal <[email protected]>
---
drivers/gpu/drm/amd/pm/amdgpu_pm.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
index 60db9b66d08c..03c95621fe2c 100644
--- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
@@ -866,11 +866,15 @@ static ssize_t
amdgpu_get_pp_od_clk_voltage(struct device *dev,
if (ret)
return ret;
- for (clk_index = 0 ; clk_index < ARRAY_SIZE(od_clocks) ; clk_index++) {
+ for (clk_index = 0; clk_index < ARRAY_SIZE(od_clocks); clk_index++) {
+ if (size >= PAGE_SIZE)
+ break;
amdgpu_dpm_emit_clock_levels(adev, od_clocks[clk_index],
buf, &size);
}
- if (size == 0)
+ if (size >= PAGE_SIZE)
+ size = PAGE_SIZE;
+ else if (size == 0)
size = sysfs_emit(buf, "\n");
amdgpu_pm_put_access(adev);
@@ -3915,12 +3919,17 @@ static int amdgpu_retrieve_od_settings(struct
amdgpu_device *adev,
if (ret)
return ret;
+ if (size >= PAGE_SIZE)
+ goto out_pm_put;
+
ret = amdgpu_dpm_emit_clock_levels(adev, od_type, buf, &size);
if (ret) {
size = ret;
goto out_pm_put;
}
- if (size == 0)
+ if (size >= PAGE_SIZE)
+ size = PAGE_SIZE;
+ else if (size == 0)
size = sysfs_emit(buf, "\n");
out_pm_put:
--
2.46.0