Op 07-04-15 om 15:37 schreef Daniel Vetter:
> On Tue, Apr 07, 2015 at 11:32:02AM +0200, Maarten Lankhorst wrote:
>> Signed-off-by: Maarten Lankhorst <[email protected]>
>> ---
>> diff --git a/drivers/gpu/drm/i915/i915_drv.h 
>> b/drivers/gpu/drm/i915/i915_drv.h
>> index b13c5526a73b..7aaf8eddf19c 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.h
>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> @@ -2146,14 +2146,14 @@ i915_gem_request_unreference(struct 
>> drm_i915_gem_request *req)
>>  static inline void
>>  i915_gem_request_unreference__unlocked(struct drm_i915_gem_request *req)
>>  {
>> -    if (req && !atomic_add_unless(&req->ref.refcount, -1, 1)) {
>> -            struct drm_device *dev = req->ring->dev;
>> +    struct drm_device *dev;
>> +
>> +    if (!req)
>> +            return;
>>  
>> -            mutex_lock(&dev->struct_mutex);
>> -            if (likely(atomic_dec_and_test(&req->ref.refcount)))
>> -                    i915_gem_request_free(&req->ref);
>> +    dev = req->ring->dev;
>> +    if (kref_put_mutex(&req->ref, i915_gem_request_free, 
>> &dev->struct_mutex))
>>              mutex_unlock(&dev->struct_mutex);
> We don't need this conditional unlock here since that's only possible if
> you have a weak reference somewhere (i.e. using kref_get_unless_zero). If
> the object only has strong references and you're dropping the last one it
> can't magically get resurrected somehow.
Because we use the same put call for kref_put and kref_put_mutex we do need to 
unlock struct_mutex here,
kref_put_mutex doesn't release the mutex if true, so either the release call 
needs to do it or the callee.

> And drm_gem_object_unreference_unlocked wants the same patch I think.
Indeed it does, but with slightly more lockdep annotation!
_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to