Limit GPU/MEM/VCN load sensor values to 0-100 range via clamp_t to ensure validity.
Signed-off-by: Yang Wang <[email protected]> --- drivers/gpu/drm/amd/pm/amdgpu_pm.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c b/drivers/gpu/drm/amd/pm/amdgpu_pm.c index 938361ecae05..86ef1ffbf1dd 100644 --- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c @@ -1414,20 +1414,39 @@ static ssize_t amdgpu_set_pp_power_profile_mode(struct device *dev, static int amdgpu_pm_get_sensor_generic(struct amdgpu_device *adev, enum amd_pp_sensors sensor, - void *query) + uint32_t *val) { - int r, size = sizeof(uint32_t); + uint32_t tmp = UINT_MAX, size = sizeof(tmp); + int r; + + if (!val) + return -EINVAL; r = amdgpu_pm_get_access_if_active(adev); if (r) return r; /* get the sensor value */ - r = amdgpu_dpm_read_sensor(adev, sensor, query, &size); + r = amdgpu_dpm_read_sensor(adev, sensor, (void *)&tmp, &size); amdgpu_pm_put_access(adev); - return r; + if (r) + return r; + + switch (sensor) { + case AMDGPU_PP_SENSOR_GPU_LOAD: + case AMDGPU_PP_SENSOR_MEM_LOAD: + case AMDGPU_PP_SENSOR_VCN_LOAD: + tmp = clamp_t(uint32_t, tmp, 0, 100); + break; + default: + break; + } + + *val = tmp; + + return 0; } /** -- 2.47.3
