]> git.itanic.dy.fi Git - linux-stable/commitdiff
drm: renesas: shmobile: Use drmm_universal_plane_alloc()
authorGeert Uytterhoeven <geert+renesas@glider.be>
Fri, 15 Sep 2023 08:53:34 +0000 (10:53 +0200)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Mon, 16 Oct 2023 09:47:45 +0000 (11:47 +0200)
According to the comments for drm_universal_plane_init(), the plane
structure should not be allocated with devm_kzalloc().

Fix lifetime issues by using drmm_universal_plane_alloc() instead.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/65ebf0513e2836227a9636e922f51c668bd69720.1694767209.git.geert+renesas@glider.be
drivers/gpu/drm/renesas/shmobile/shmob_drm_plane.c

index 3a5db319bad142184cd37b1a335affaed7cd0656..1fb68b5fe915b8dcdf05a400b49ec5e31b729b1b 100644 (file)
@@ -179,7 +179,6 @@ static int shmob_drm_plane_disable(struct drm_plane *plane,
 static const struct drm_plane_funcs shmob_drm_plane_funcs = {
        .update_plane = shmob_drm_plane_update,
        .disable_plane = shmob_drm_plane_disable,
-       .destroy = drm_plane_cleanup,
 };
 
 static const uint32_t formats[] = {
@@ -198,19 +197,16 @@ static const uint32_t formats[] = {
 int shmob_drm_plane_create(struct shmob_drm_device *sdev, unsigned int index)
 {
        struct shmob_drm_plane *splane;
-       int ret;
 
-       splane = devm_kzalloc(sdev->dev, sizeof(*splane), GFP_KERNEL);
-       if (splane == NULL)
-               return -ENOMEM;
+       splane = drmm_universal_plane_alloc(sdev->ddev, struct shmob_drm_plane,
+                                           plane, 1, &shmob_drm_plane_funcs,
+                                           formats, ARRAY_SIZE(formats), NULL,
+                                           DRM_PLANE_TYPE_OVERLAY, NULL);
+       if (IS_ERR(splane))
+               return PTR_ERR(splane);
 
        splane->index = index;
        splane->alpha = 255;
 
-       ret = drm_universal_plane_init(sdev->ddev, &splane->plane, 1,
-                                      &shmob_drm_plane_funcs,
-                                      formats, ARRAY_SIZE(formats), NULL,
-                                      DRM_PLANE_TYPE_OVERLAY, NULL);
-
-       return ret;
+       return 0;
 }