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

Reply via email to