diff options
author | Paul Mundt <lethal@linux-sh.org> | 2010-12-21 22:56:10 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-12-21 22:56:10 -0500 |
commit | 7ccbefe07ea0a3570e44d1ec13a307552ee4dadd (patch) | |
tree | ba0299694a9f3940f289b6a29cadab853906e3d2 /drivers/gpu/drm/ttm/ttm_bo.c | |
parent | 623eb15647fc35c5a8cd38985d5958240eb072c1 (diff) | |
parent | 90a8a73c06cc32b609a880d48449d7083327e11a (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'drivers/gpu/drm/ttm/ttm_bo.c')
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 3ca77dc03915..148a322d8f5d 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c | |||
@@ -224,6 +224,9 @@ int ttm_bo_reserve_locked(struct ttm_buffer_object *bo, | |||
224 | int ret; | 224 | int ret; |
225 | 225 | ||
226 | while (unlikely(atomic_cmpxchg(&bo->reserved, 0, 1) != 0)) { | 226 | while (unlikely(atomic_cmpxchg(&bo->reserved, 0, 1) != 0)) { |
227 | /** | ||
228 | * Deadlock avoidance for multi-bo reserving. | ||
229 | */ | ||
227 | if (use_sequence && bo->seq_valid && | 230 | if (use_sequence && bo->seq_valid && |
228 | (sequence - bo->val_seq < (1 << 31))) { | 231 | (sequence - bo->val_seq < (1 << 31))) { |
229 | return -EAGAIN; | 232 | return -EAGAIN; |
@@ -241,6 +244,14 @@ int ttm_bo_reserve_locked(struct ttm_buffer_object *bo, | |||
241 | } | 244 | } |
242 | 245 | ||
243 | if (use_sequence) { | 246 | if (use_sequence) { |
247 | /** | ||
248 | * Wake up waiters that may need to recheck for deadlock, | ||
249 | * if we decreased the sequence number. | ||
250 | */ | ||
251 | if (unlikely((bo->val_seq - sequence < (1 << 31)) | ||
252 | || !bo->seq_valid)) | ||
253 | wake_up_all(&bo->event_queue); | ||
254 | |||
244 | bo->val_seq = sequence; | 255 | bo->val_seq = sequence; |
245 | bo->seq_valid = true; | 256 | bo->seq_valid = true; |
246 | } else { | 257 | } else { |