diff options
author | Thomas Hellstrom <thellstrom@vmware.com> | 2010-09-30 12:36:45 +0200 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-10-06 09:04:43 +1000 |
commit | 1df6a2ebd75067aefbdf07482bf8e3d0584e04ee (patch) | |
tree | 3cbe04b79b00b0ba15fda1e60e2544f152741a0e /include/drm | |
parent | e1d9694cae722d00a94fb58f901aa69c9c324a16 (diff) | |
download | kernel_samsung_espresso10-1df6a2ebd75067aefbdf07482bf8e3d0584e04ee.zip kernel_samsung_espresso10-1df6a2ebd75067aefbdf07482bf8e3d0584e04ee.tar.gz kernel_samsung_espresso10-1df6a2ebd75067aefbdf07482bf8e3d0584e04ee.tar.bz2 |
drm/ttm: Fix two race conditions + fix busy codepaths
This fixes a race pointed out by Dave Airlie where we don't take a buffer
object about to be destroyed off the LRU lists properly. It also fixes a rare
case where a buffer object could be destroyed in the middle of an
accelerated eviction.
The patch also adds a utility function that can be used to prematurely
release GPU memory space usage of an object waiting to be destroyed.
For example during eviction or swapout.
The above mentioned commit didn't queue the buffer on the delayed destroy
list under some rare circumstances. It also didn't completely honor the
remove_all parameter.
Fixes:
https://bugzilla.redhat.com/show_bug.cgi?id=615505
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=591061
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'include/drm')
-rw-r--r-- | include/drm/ttm/ttm_bo_api.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index 267a86c..2040e6c 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h @@ -246,9 +246,11 @@ struct ttm_buffer_object { atomic_t reserved; - /** * Members protected by the bo::lock + * In addition, setting sync_obj to anything else + * than NULL requires bo::reserved to be held. This allows for + * checking NULL while reserved but not holding bo::lock. */ void *sync_obj_arg; |