diff mbox series

[01/24] drm/armada: Use devm_drm_dev_alloc

Message ID 20200904143941.110665-2-daniel.vetter@ffwll.ch (mailing list archive)
State New, archived
Headers show
Series drm_managed, leftovers | expand

Commit Message

Daniel Vetter Sept. 4, 2020, 2:39 p.m. UTC
Also remove the now no longer needed build bug on since that's already
not needed anymore with drmm_add_final_kfree. Conversion to managed
drm_device cleanup is easy, the final drm_dev_put() is already the
last thing in both the bind unbind as in the unbind flow.

Also, this relies on component.c correctly wrapping bind&unbind in
separate devres groups, which it does.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Russell King <linux@armlinux.org.uk>
---
 drivers/gpu/drm/armada/armada_drv.c | 26 ++++++--------------------
 1 file changed, 6 insertions(+), 20 deletions(-)

Comments

Dave Airlie Sept. 10, 2020, 1:20 a.m. UTC | #1
For the two armada patches.

Reviewed-by: Dave Airlie <airlied@redhat.com>

On Sat, 5 Sep 2020 at 00:40, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>
> Also remove the now no longer needed build bug on since that's already
> not needed anymore with drmm_add_final_kfree. Conversion to managed
> drm_device cleanup is easy, the final drm_dev_put() is already the
> last thing in both the bind unbind as in the unbind flow.
>
> Also, this relies on component.c correctly wrapping bind&unbind in
> separate devres groups, which it does.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Russell King <linux@armlinux.org.uk>
> ---
>  drivers/gpu/drm/armada/armada_drv.c | 26 ++++++--------------------
>  1 file changed, 6 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
> index 5fc25c3f445c..a8d5908b3922 100644
> --- a/drivers/gpu/drm/armada/armada_drv.c
> +++ b/drivers/gpu/drm/armada/armada_drv.c
> @@ -87,24 +87,13 @@ static int armada_drm_bind(struct device *dev)
>                                      "armada-drm"))
>                 return -EBUSY;
>
> -       priv = kzalloc(sizeof(*priv), GFP_KERNEL);
> -       if (!priv)
> -               return -ENOMEM;
> -
> -       /*
> -        * The drm_device structure must be at the start of
> -        * armada_private for drm_dev_put() to work correctly.
> -        */
> -       BUILD_BUG_ON(offsetof(struct armada_private, drm) != 0);
> -
> -       ret = drm_dev_init(&priv->drm, &armada_drm_driver, dev);
> -       if (ret) {
> -               dev_err(dev, "[" DRM_NAME ":%s] drm_dev_init failed: %d\n",
> -                       __func__, ret);
> -               kfree(priv);
> -               return ret;
> +       priv = devm_drm_dev_alloc(dev, &armada_drm_driver,
> +                                 struct armada_private, drm);
> +       if (IS_ERR(priv)) {
> +               dev_err(dev, "[" DRM_NAME ":%s] devm_drm_dev_alloc failed: %li\n",
> +                       __func__, PTR_ERR(priv));
> +               return PTR_ERR(priv);
>         }
> -       drmm_add_final_kfree(&priv->drm, priv);
>
>         /* Remove early framebuffers */
>         ret = drm_fb_helper_remove_conflicting_framebuffers(NULL,
> @@ -174,7 +163,6 @@ static int armada_drm_bind(struct device *dev)
>   err_kms:
>         drm_mode_config_cleanup(&priv->drm);
>         drm_mm_takedown(&priv->linear);
> -       drm_dev_put(&priv->drm);
>         return ret;
>  }
>
> @@ -194,8 +182,6 @@ static void armada_drm_unbind(struct device *dev)
>
>         drm_mode_config_cleanup(&priv->drm);
>         drm_mm_takedown(&priv->linear);
> -
> -       drm_dev_put(&priv->drm);
>  }
>
>  static int compare_of(struct device *dev, void *data)
> --
> 2.28.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff mbox series

Patch

diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
index 5fc25c3f445c..a8d5908b3922 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
@@ -87,24 +87,13 @@  static int armada_drm_bind(struct device *dev)
 				     "armada-drm"))
 		return -EBUSY;
 
-	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
-	if (!priv)
-		return -ENOMEM;
-
-	/*
-	 * The drm_device structure must be at the start of
-	 * armada_private for drm_dev_put() to work correctly.
-	 */
-	BUILD_BUG_ON(offsetof(struct armada_private, drm) != 0);
-
-	ret = drm_dev_init(&priv->drm, &armada_drm_driver, dev);
-	if (ret) {
-		dev_err(dev, "[" DRM_NAME ":%s] drm_dev_init failed: %d\n",
-			__func__, ret);
-		kfree(priv);
-		return ret;
+	priv = devm_drm_dev_alloc(dev, &armada_drm_driver,
+				  struct armada_private, drm);
+	if (IS_ERR(priv)) {
+		dev_err(dev, "[" DRM_NAME ":%s] devm_drm_dev_alloc failed: %li\n",
+			__func__, PTR_ERR(priv));
+		return PTR_ERR(priv);
 	}
-	drmm_add_final_kfree(&priv->drm, priv);
 
 	/* Remove early framebuffers */
 	ret = drm_fb_helper_remove_conflicting_framebuffers(NULL,
@@ -174,7 +163,6 @@  static int armada_drm_bind(struct device *dev)
  err_kms:
 	drm_mode_config_cleanup(&priv->drm);
 	drm_mm_takedown(&priv->linear);
-	drm_dev_put(&priv->drm);
 	return ret;
 }
 
@@ -194,8 +182,6 @@  static void armada_drm_unbind(struct device *dev)
 
 	drm_mode_config_cleanup(&priv->drm);
 	drm_mm_takedown(&priv->linear);
-
-	drm_dev_put(&priv->drm);
 }
 
 static int compare_of(struct device *dev, void *data)