Make sure in case of errors between the first fetch of an OPP in panthor_devfreq_init and its successive put, the error path decrements its reference count to avoid OPP object leaks when removing the device. Signed-off-by: Adrián Larumbe <adrian.larumbe@xxxxxxxxxxxxx> Fixes: fac9b22df4b1 ("drm/panthor: Add the devfreq logical block") --- drivers/gpu/drm/panthor/panthor_devfreq.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_devfreq.c b/drivers/gpu/drm/panthor/panthor_devfreq.c index 9d0f891b9b53..ce0ac4563f65 100644 --- a/drivers/gpu/drm/panthor/panthor_devfreq.c +++ b/drivers/gpu/drm/panthor/panthor_devfreq.c @@ -197,7 +197,7 @@ int panthor_devfreq_init(struct panthor_device *ptdev) if (ret && ret != -ENODEV) { if (ret != -EPROBE_DEFER) DRM_DEV_ERROR(dev, "Couldn't retrieve/enable sram supply\n"); - return ret; + goto opp_err; } /* @@ -207,7 +207,7 @@ int panthor_devfreq_init(struct panthor_device *ptdev) ret = dev_pm_opp_set_opp(dev, opp); if (ret) { DRM_DEV_ERROR(dev, "Couldn't set recommended OPP\n"); - return ret; + goto opp_err; } dev_pm_opp_put(opp); @@ -242,6 +242,10 @@ int panthor_devfreq_init(struct panthor_device *ptdev) DRM_DEV_INFO(dev, "Failed to register cooling device\n"); return 0; + +opp_err: + dev_pm_opp_put(opp); + return ret; } int panthor_devfreq_resume(struct panthor_device *ptdev) -- 2.46.2