dev_pm_qos_add_request() can fail, and it returns -EINVAL in case of wrong parameters, return -ENOMEM if there's not enough memory to allocate for data structures, and return -ENODEV if the device has just been removed from the system. If it fails in msm_devfreq_init(), there is no point in going on, also call dev_pm_qos_remove_request() in the next error path is also meaningless Fixes: 7c0ffcd40b16 ("drm/msm/gpu: Respect PM QoS constraints") Signed-off-by: Jinjie Ruan <ruanjinjie@xxxxxxxxxx> --- drivers/gpu/drm/msm/msm_gpu_devfreq.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gpu_devfreq.c b/drivers/gpu/drm/msm/msm_gpu_devfreq.c index ea70c1c32d94..9a7a18d4335b 100644 --- a/drivers/gpu/drm/msm/msm_gpu_devfreq.c +++ b/drivers/gpu/drm/msm/msm_gpu_devfreq.c @@ -138,8 +138,9 @@ static bool has_devfreq(struct msm_gpu *gpu) void msm_devfreq_init(struct msm_gpu *gpu) { - struct msm_gpu_devfreq *df = &gpu->devfreq; struct msm_drm_private *priv = gpu->dev->dev_private; + struct msm_gpu_devfreq *df = &gpu->devfreq; + int ret; /* We need target support to do devfreq */ if (!gpu->funcs->gpu_busy) @@ -156,8 +157,10 @@ void msm_devfreq_init(struct msm_gpu *gpu) mutex_init(&df->lock); - dev_pm_qos_add_request(&gpu->pdev->dev, &df->boost_freq, - DEV_PM_QOS_MIN_FREQUENCY, 0); + ret = dev_pm_qos_add_request(&gpu->pdev->dev, &df->boost_freq, + DEV_PM_QOS_MIN_FREQUENCY, 0); + if (ret < 0) + return; msm_devfreq_profile.initial_freq = gpu->fast_rate; -- 2.34.1