Commit 0578be68 authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Daniel Vetter

drm: Use kref_put_mutex in drm_gem_object_unreference_unlocked

If kref_put_mutex returns true then the caller or the put function is responsible
for unlocking the mutex. The usual pattern assumes that the free
callback unlocks the mutex, but since that is shared with the locked
variant we need to explicitly unlock here.
Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent be26a66d
...@@ -149,14 +149,16 @@ drm_gem_object_unreference(struct drm_gem_object *obj) ...@@ -149,14 +149,16 @@ drm_gem_object_unreference(struct drm_gem_object *obj)
static inline void static inline void
drm_gem_object_unreference_unlocked(struct drm_gem_object *obj) drm_gem_object_unreference_unlocked(struct drm_gem_object *obj)
{ {
if (obj && !atomic_add_unless(&obj->refcount.refcount, -1, 1)) { struct drm_device *dev;
struct drm_device *dev = obj->dev;
if (!obj)
return;
mutex_lock(&dev->struct_mutex); dev = obj->dev;
if (likely(atomic_dec_and_test(&obj->refcount.refcount))) if (kref_put_mutex(&obj->refcount, drm_gem_object_free, &dev->struct_mutex))
drm_gem_object_free(&obj->refcount);
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
} else
might_lock(&dev->struct_mutex);
} }
int drm_gem_handle_create(struct drm_file *file_priv, int drm_gem_handle_create(struct drm_file *file_priv,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment