Created
          April 29, 2015 13:43 
        
      - 
      
- 
        Save mthierry/ca1cc63c54b692e49106 to your computer and use it in GitHub Desktop. 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c | |
| index 6adee4c..4956f03 100644 | |
| --- a/drivers/gpu/drm/drm_gem.c | |
| +++ b/drivers/gpu/drm/drm_gem.c | |
| @@ -234,6 +234,7 @@ drm_gem_object_handle_unreference_unlocked(struct drm_gem_object *obj) | |
| } | |
| mutex_unlock(&obj->dev->object_name_lock); | |
| + trace_printk("handle_unref_unlocked, obj=%p\n", obj); | |
| drm_gem_object_unreference_unlocked(obj); | |
| } | |
| @@ -280,6 +281,8 @@ drm_gem_handle_delete(struct drm_file *filp, u32 handle) | |
| if (dev->driver->gem_close_object) | |
| dev->driver->gem_close_object(obj, filp); | |
| + | |
| + trace_printk("handle_delete, handle=0x%x, obj=%p\n", handle, obj); | |
| drm_gem_object_handle_unreference_unlocked(obj); | |
| return 0; | |
| @@ -582,8 +585,9 @@ drm_gem_close_ioctl(struct drm_device *dev, void *data, | |
| if (!(dev->driver->driver_features & DRIVER_GEM)) | |
| return -ENODEV; | |
| + trace_printk("s gem_close_ioctl, handle=0x%x\n", args->handle); | |
| ret = drm_gem_handle_delete(file_priv, args->handle); | |
| - | |
| + trace_printk("e gem_close_ioctl, handle=0x%x\n", args->handle); | |
| return ret; | |
| } | |
| diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c | |
| index d8a5ce7..14ff618 100644 | |
| --- a/drivers/gpu/drm/i915/i915_gem.c | |
| +++ b/drivers/gpu/drm/i915/i915_gem.c | |
| @@ -5234,6 +5234,7 @@ void i915_gem_free_object(struct drm_gem_object *gem_obj) | |
| intel_runtime_pm_get(dev_priv); | |
| trace_i915_gem_object_destroy(obj); | |
| + trace_printk("i915 free, obj=%p\n", gem_obj); | |
| kfree(obj->userdata_blk); | |
| diff --git a/include/drm/drmP.h b/include/drm/drmP.h | |
| index a270ca6..0557828 100644 | |
| --- a/include/drm/drmP.h | |
| +++ b/include/drm/drmP.h | |
| @@ -1561,27 +1561,50 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); | |
| static inline void | |
| drm_gem_object_reference(struct drm_gem_object *obj) | |
| { | |
| + trace_printk("obj_ref s, obj=%p refcount=%d\n", obj, atomic_read(&obj->refcount.refcount)); | |
| kref_get(&obj->refcount); | |
| + trace_printk("obj_ref e, obj=%p refcount=%d\n", obj, atomic_read(&obj->refcount.refcount)); | |
| } | |
| static inline void | |
| drm_gem_object_unreference(struct drm_gem_object *obj) | |
| { | |
| - if (obj != NULL) | |
| + if (obj != NULL) { | |
| + trace_printk("obj_unref, obj=%p refcount=%d\n", obj, atomic_read(&obj->refcount.refcount)); | |
| kref_put(&obj->refcount, drm_gem_object_free); | |
| + } | |
| } | |
| static inline void | |
| drm_gem_object_unreference_unlocked(struct drm_gem_object *obj) | |
| { | |
| +#if 1 | |
| + trace_printk("obj_unref_unlocked 1, obj=%p refcount=%d\n", obj, atomic_read(&obj->refcount.refcount)); | |
| + | |
| if (obj && !atomic_add_unless(&obj->refcount.refcount, -1, 1)) { | |
| struct drm_device *dev = obj->dev; | |
| + trace_printk("obj_unref_unlocked 2, obj=%p refcount=%d\n", obj, atomic_read(&obj->refcount.refcount)); | |
| mutex_lock(&dev->struct_mutex); | |
| - if (likely(atomic_dec_and_test(&obj->refcount.refcount))) | |
| + if (likely(atomic_dec_and_test(&obj->refcount.refcount))) { | |
| + trace_printk("obj_unref_unlocked 3, obj=%p, refcount=%d\n", obj, atomic_read(&obj->refcount.refcount)); | |
| drm_gem_object_free(&obj->refcount); | |
| + } | |
| mutex_unlock(&dev->struct_mutex); | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment