The top-level error handler calls drm_mode_config_cleanup() which will
destroy all planes. There's no need to destroy them manually in lower
error handlers.

As plane cleanup is now handled entirely by drm_mode_config_cleanup(),
we must ensure that the plane .destroy() handler frees allocated memory
for the plane object that was freed by malidp_de_planes_destroy(). Do so
by replacing the call to devm_kfree() in the .destroy() handler by
kfree(). devm_kfree() is currently a no-op as the plane memory is
allocated with kzalloc(), not devm_kzalloc().

Signed-off-by: Laurent Pinchart <laurent.pinchart+rene...@ideasonboard.com>
---
 drivers/gpu/drm/arm/malidp_crtc.c   | 10 ++--------
 drivers/gpu/drm/arm/malidp_drv.c    |  1 -
 drivers/gpu/drm/arm/malidp_drv.h    |  1 -
 drivers/gpu/drm/arm/malidp_planes.c | 13 +------------
 4 files changed, 3 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/arm/malidp_crtc.c 
b/drivers/gpu/drm/arm/malidp_crtc.c
index 904fff80917b..f0fb2aa153a1 100644
--- a/drivers/gpu/drm/arm/malidp_crtc.c
+++ b/drivers/gpu/drm/arm/malidp_crtc.c
@@ -525,14 +525,13 @@ int malidp_crtc_init(struct drm_device *drm)
 
        if (!primary) {
                DRM_ERROR("no primary plane found\n");
-               ret = -EINVAL;
-               goto crtc_cleanup_planes;
+               return -EINVAL;
        }
 
        ret = drm_crtc_init_with_planes(drm, &malidp->crtc, primary, NULL,
                                        &malidp_crtc_funcs, NULL);
        if (ret)
-               goto crtc_cleanup_planes;
+               return ret;
 
        drm_crtc_helper_add(&malidp->crtc, &malidp_crtc_helper_funcs);
        drm_mode_crtc_set_gamma_size(&malidp->crtc, MALIDP_GAMMA_LUT_SIZE);
@@ -542,9 +541,4 @@ int malidp_crtc_init(struct drm_device *drm)
        malidp_se_set_enh_coeffs(malidp->dev);
 
        return 0;
-
-crtc_cleanup_planes:
-       malidp_de_planes_destroy(drm);
-
-       return ret;
 }
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 3d82712d8002..0711279e836f 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -276,7 +276,6 @@ static int malidp_init(struct drm_device *drm)
 
 static void malidp_fini(struct drm_device *drm)
 {
-       malidp_de_planes_destroy(drm);
        drm_mode_config_cleanup(drm);
 }
 
diff --git a/drivers/gpu/drm/arm/malidp_drv.h b/drivers/gpu/drm/arm/malidp_drv.h
index e0d12c9fc6b8..7f6ef0a040f7 100644
--- a/drivers/gpu/drm/arm/malidp_drv.h
+++ b/drivers/gpu/drm/arm/malidp_drv.h
@@ -59,7 +59,6 @@ struct malidp_crtc_state {
 #define to_malidp_crtc_state(x) container_of(x, struct malidp_crtc_state, base)
 
 int malidp_de_planes_init(struct drm_device *drm);
-void malidp_de_planes_destroy(struct drm_device *drm);
 int malidp_crtc_init(struct drm_device *drm);
 
 /* often used combination of rotational bits */
diff --git a/drivers/gpu/drm/arm/malidp_planes.c 
b/drivers/gpu/drm/arm/malidp_planes.c
index 33c5ef96ced0..d883d28d5d9d 100644
--- a/drivers/gpu/drm/arm/malidp_planes.c
+++ b/drivers/gpu/drm/arm/malidp_planes.c
@@ -61,7 +61,7 @@ static void malidp_de_plane_destroy(struct drm_plane *plane)
 
        drm_plane_helper_disable(plane);
        drm_plane_cleanup(plane);
-       devm_kfree(plane->dev->dev, mp);
+       kfree(mp);
 }
 
 /*
@@ -427,18 +427,7 @@ int malidp_de_planes_init(struct drm_device *drm)
        return 0;
 
 cleanup:
-       malidp_de_planes_destroy(drm);
        kfree(formats);
 
        return ret;
 }
-
-void malidp_de_planes_destroy(struct drm_device *drm)
-{
-       struct drm_plane *p, *pt;
-
-       list_for_each_entry_safe(p, pt, &drm->mode_config.plane_list, head) {
-               drm_plane_cleanup(p);
-               kfree(p);
-       }
-}
-- 
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to