#include <linux/sched/signal.h>
 #include <linux/uaccess.h>
 
+#include <drm/drm_managed.h>
 #include <drm/drm_syncobj.h>
 #include <uapi/drm/v3d_drm.h>
 
 
        spin_lock_init(&v3d->mm_lock);
        spin_lock_init(&v3d->job_lock);
-       mutex_init(&v3d->bo_lock);
-       mutex_init(&v3d->reset_lock);
-       mutex_init(&v3d->sched_lock);
-       mutex_init(&v3d->cache_clean_lock);
+       ret = drmm_mutex_init(dev, &v3d->bo_lock);
+       if (ret)
+               return ret;
+       ret = drmm_mutex_init(dev, &v3d->reset_lock);
+       if (ret)
+               return ret;
+       ret = drmm_mutex_init(dev, &v3d->sched_lock);
+       if (ret)
+               return ret;
+       ret = drmm_mutex_init(dev, &v3d->cache_clean_lock);
+       if (ret)
+               return ret;
 
        /* Note: We don't allocate address 0.  Various bits of HW
         * treat 0 as special, such as the occlusion query counters