1
linux/include/drm
Chris Wilson 39b4d07aa3 drm: Hold the mutex when dropping the last GEM reference (v2)
In order to be fully threadsafe we need to check that the drm_gem_object
refcount is still 0 after acquiring the mutex in order to call the free
function. Otherwise, we may encounter scenarios like:

Thread A:                                        Thread B:
drm_gem_close
unreference_unlocked
kref_put                                         mutex_lock
...                                              i915_gem_evict
...                                              kref_get -> BUG
...                                              i915_gem_unbind
...                                              kref_put
...                                              i915_gem_object_free
...                                              mutex_unlock
mutex_lock
i915_gem_object_free -> BUG
i915_gem_object_unbind
kfree
mutex_unlock

Note that no driver is currently using the free_unlocked vfunc and it is
scheduled for removal, hasten that process.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=30454
Reported-and-Tested-by: Magnus Kessler <Magnus.Kessler@gmx.net>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
2010-10-01 21:08:45 +10:00
..
i2c drm: Import driver for the sil164 I2C TMDS transmitter. 2010-08-02 10:21:13 +10:00
ttm drm: move ttm global code to core drm 2010-08-04 09:46:06 +10:00
drm_buffer.h
drm_cache.h
drm_core.h drm: Fix support for PCI domains 2010-08-10 08:20:20 +10:00
drm_crtc_helper.h Merge branch 'drm-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6 2010-08-05 16:02:01 -07:00
drm_crtc.h drm: Use a nondestructive mode for output detect when polling (v2) 2010-09-14 20:38:48 +10:00
drm_dp_helper.h
drm_edid.h drm/edid: Add detailed block walk for CEA extensions 2010-08-10 10:46:57 +10:00
drm_encoder_slave.h
drm_fb_helper.h drm: add KGDB/KDB support 2010-08-05 09:22:31 -05:00
drm_fixed.h drm: move radeon_fixed.h to shared drm_fixed.h header 2010-05-18 18:21:33 +10:00
drm_global.h drm: move ttm global code to core drm 2010-08-04 09:46:06 +10:00
drm_hashtab.h
drm_mem_util.h
drm_memory.h
drm_mm.h drm: implement helper functions for scanning lru list 2010-07-07 12:29:51 +10:00
drm_mode.h drm: add "auto" dithering method 2010-07-21 11:19:45 +10:00
drm_os_linux.h
drm_pciids.h drm/radeon: fix PCI ID 5657 to be an RV410 2010-09-27 09:21:28 +10:00
drm_sarea.h
drm_sman.h
drm_sysfs.h
drm.h drm: move ttm global code to core drm 2010-08-04 09:46:06 +10:00
drmP.h drm: Hold the mutex when dropping the last GEM reference (v2) 2010-10-01 21:08:45 +10:00
i810_drm.h
i830_drm.h drm: block userspace under allocating buffer and having drivers overwrite it (v2) 2010-08-17 14:52:25 +10:00
i915_drm.h Merge branch 'drm-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6 2010-08-23 18:28:03 -07:00
Kbuild include: replace unifdef-y with header-y 2010-08-14 22:26:51 +02:00
mga_drm.h drm: block userspace under allocating buffer and having drivers overwrite it (v2) 2010-08-17 14:52:25 +10:00
nouveau_drm.h drm: block userspace under allocating buffer and having drivers overwrite it (v2) 2010-08-17 14:52:25 +10:00
r128_drm.h
radeon_drm.h drm: block userspace under allocating buffer and having drivers overwrite it (v2) 2010-08-17 14:52:25 +10:00
savage_drm.h drm: block userspace under allocating buffer and having drivers overwrite it (v2) 2010-08-17 14:52:25 +10:00
sis_drm.h
via_drm.h
vmwgfx_drm.h drm/vmwgfx: Allow userspace to change default layout. Bump minor. 2010-06-03 13:13:36 +10:00