drm/vc4: Switch to drmm_mutex_init
authorMaxime Ripard <maxime@cerno.tech>
Mon, 11 Jul 2022 17:39:35 +0000 (19:39 +0200)
committerMaxime Ripard <maxime@cerno.tech>
Wed, 13 Jul 2022 08:46:13 +0000 (10:46 +0200)
mutex_init is supposed to be balanced by a call to mutex_destroy that we
were never doing in the vc4 driver.

Since a DRM-managed mutex_init variant has been introduced, let's just
switch to it.

Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://lore.kernel.org/r/20220711173939.1132294-66-maxime@cerno.tech
drivers/gpu/drm/vc4/vc4_bo.c
drivers/gpu/drm/vc4/vc4_drv.c
drivers/gpu/drm/vc4/vc4_gem.c
drivers/gpu/drm/vc4/vc4_hdmi.c

index 9706fec..2ccf96b 100644 (file)
@@ -394,6 +394,7 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
 {
        struct vc4_dev *vc4 = to_vc4_dev(dev);
        struct vc4_bo *bo;
+       int ret;
 
        if (WARN_ON_ONCE(vc4->is_vc5))
                return ERR_PTR(-ENODEV);
@@ -404,7 +405,11 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
 
        bo->madv = VC4_MADV_WILLNEED;
        refcount_set(&bo->usecnt, 0);
-       mutex_init(&bo->madv_lock);
+
+       ret = drmm_mutex_init(dev, &bo->madv_lock);
+       if (ret)
+               return ERR_PTR(ret);
+
        mutex_lock(&vc4->bo_lock);
        bo->label = VC4_BO_TYPE_KERNEL;
        vc4->bo_labels[VC4_BO_TYPE_KERNEL].num_allocated++;
@@ -1005,6 +1010,7 @@ static void vc4_bo_cache_destroy(struct drm_device *dev, void *unused);
 int vc4_bo_cache_init(struct drm_device *dev)
 {
        struct vc4_dev *vc4 = to_vc4_dev(dev);
+       int ret;
        int i;
 
        if (WARN_ON_ONCE(vc4->is_vc5))
@@ -1024,7 +1030,12 @@ int vc4_bo_cache_init(struct drm_device *dev)
        for (i = 0; i < VC4_BO_TYPE_COUNT; i++)
                vc4->bo_labels[i].name = bo_type_names[i];
 
-       mutex_init(&vc4->bo_lock);
+       ret = drmm_mutex_init(dev, &vc4->bo_lock);
+       if (ret) {
+               kfree(vc4->bo_labels);
+               return ret;
+       }
+
        INIT_LIST_HEAD(&vc4->bo_cache.time_list);
 
        INIT_WORK(&vc4->bo_cache.time_work, vc4_bo_cache_time_work);
index 79a37d1..89975bd 100644 (file)
@@ -324,7 +324,9 @@ static int vc4_drm_bind(struct device *dev)
        INIT_LIST_HEAD(&vc4->debugfs_list);
 
        if (!is_vc5) {
-               mutex_init(&vc4->bin_bo_lock);
+               ret = drmm_mutex_init(drm, &vc4->bin_bo_lock);
+               if (ret)
+                       return ret;
 
                ret = vc4_bo_cache_init(drm);
                if (ret)
index fe10d9c..7acb439 100644 (file)
@@ -1308,6 +1308,7 @@ static void vc4_gem_destroy(struct drm_device *dev, void *unused);
 int vc4_gem_init(struct drm_device *dev)
 {
        struct vc4_dev *vc4 = to_vc4_dev(dev);
+       int ret;
 
        if (WARN_ON_ONCE(vc4->is_vc5))
                return -ENODEV;
@@ -1325,10 +1326,15 @@ int vc4_gem_init(struct drm_device *dev)
 
        INIT_WORK(&vc4->job_done_work, vc4_job_done_work);
 
-       mutex_init(&vc4->power_lock);
+       ret = drmm_mutex_init(dev, &vc4->power_lock);
+       if (ret)
+               return ret;
 
        INIT_LIST_HEAD(&vc4->purgeable.list);
-       mutex_init(&vc4->purgeable.lock);
+
+       ret = drmm_mutex_init(dev, &vc4->purgeable.lock);
+       if (ret)
+               return ret;
 
        return drmm_add_action_or_reset(dev, vc4_gem_destroy, NULL);
 }
index 4acc865..6f61a1b 100644 (file)
@@ -3270,7 +3270,10 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)
        if (!vc4_hdmi)
                return -ENOMEM;
 
-       mutex_init(&vc4_hdmi->mutex);
+       ret = drmm_mutex_init(drm, &vc4_hdmi->mutex);
+       if (ret)
+               return ret;
+
        spin_lock_init(&vc4_hdmi->hw_lock);
        INIT_DELAYED_WORK(&vc4_hdmi->scrambling_work, vc4_hdmi_scrambling_wq);