Use drm managed resources to allocate driver structures and get rid of
the deprecated drm_dev_alloc() call and replace it with
devm_drm_dev_alloc().

This also serves as preparation to get rid of drm_device->dev_private
and to fix use-after-free issues on driver unload.

Signed-off-by: Danilo Krummrich <d...@redhat.com>
---
 drivers/gpu/drm/arm/hdlcd_drv.c | 12 ++++--------
 drivers/gpu/drm/arm/hdlcd_drv.h |  1 +
 2 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index a032003c340c..463381d11cff 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -247,13 +247,11 @@ static int hdlcd_drm_bind(struct device *dev)
        struct hdlcd_drm_private *hdlcd;
        int ret;
 
-       hdlcd = devm_kzalloc(dev, sizeof(*hdlcd), GFP_KERNEL);
-       if (!hdlcd)
-               return -ENOMEM;
+       hdlcd = devm_drm_dev_alloc(dev, &hdlcd_driver, typeof(*hdlcd), base);
+       if (IS_ERR(hdlcd))
+               return PTR_ERR(hdlcd);
 
-       drm = drm_dev_alloc(&hdlcd_driver, dev);
-       if (IS_ERR(drm))
-               return PTR_ERR(drm);
+       drm = &hdlcd->base;
 
        drm->dev_private = hdlcd;
        dev_set_drvdata(dev, drm);
@@ -319,7 +317,6 @@ static int hdlcd_drm_bind(struct device *dev)
 err_free:
        drm_mode_config_cleanup(drm);
        dev_set_drvdata(dev, NULL);
-       drm_dev_put(drm);
 
        return ret;
 }
@@ -344,7 +341,6 @@ static void hdlcd_drm_unbind(struct device *dev)
        drm_mode_config_cleanup(drm);
        drm->dev_private = NULL;
        dev_set_drvdata(dev, NULL);
-       drm_dev_put(drm);
 }
 
 static const struct component_master_ops hdlcd_master_ops = {
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.h b/drivers/gpu/drm/arm/hdlcd_drv.h
index 909c39c28487..3892b36767ac 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.h
+++ b/drivers/gpu/drm/arm/hdlcd_drv.h
@@ -7,6 +7,7 @@
 #define __HDLCD_DRV_H__
 
 struct hdlcd_drm_private {
+       struct drm_device               base;
        void __iomem                    *mmio;
        struct clk                      *clk;
        struct drm_crtc                 crtc;
-- 
2.37.3

Reply via email to