diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-12-13 10:53:31 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-12-13 10:53:31 -0500 |
commit | 474b9c86b0c65e9ca6a77d8b7bf132c4d5993b9c (patch) | |
tree | 9ce213f7a268d13f8871b84f1d22c2b9ff55afcf /drivers/gpu/drm/ttm/ttm_bo.c | |
parent | 49db7e7b995f5c61c5e24198f833ed01d99f5e7d (diff) | |
parent | fdea0571ddca8e3f22448f66d72a034575abea28 (diff) |
Merge branch 'topic/asoc' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6 into for-2.6.38
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 { |