summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/ttm/ttm_bo.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2010-11-24 16:21:08 +0900
committerPaul Mundt <lethal@linux-sh.org>2010-11-24 16:21:08 +0900
commit540565257101f7c52b6fc5a57651f7505f8d20fe (patch)
tree7adee0bc65a02fead0dd9cae4f2d4632b227ac56 /drivers/gpu/drm/ttm/ttm_bo.c
parent4d048435e9864998f6a6ad16422393d42322716d (diff)
parent421b446abeec55bed1251fab80cb5c12be58b773 (diff)
downloadlinux-540565257101f7c52b6fc5a57651f7505f8d20fe.tar.gz
linux-540565257101f7c52b6fc5a57651f7505f8d20fe.tar.bz2
linux-540565257101f7c52b6fc5a57651f7505f8d20fe.zip
Merge branch 'rmobile/fsi-despair' into rmobile-fixes-for-linus
Diffstat (limited to 'drivers/gpu/drm/ttm/ttm_bo.c')
-rw-r--r--drivers/gpu/drm/ttm/ttm_bo.c11
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,
int ret;
while (unlikely(atomic_cmpxchg(&bo->reserved, 0, 1) != 0)) {
+ /**
+ * Deadlock avoidance for multi-bo reserving.
+ */
if (use_sequence && bo->seq_valid &&
(sequence - bo->val_seq < (1 << 31))) {
return -EAGAIN;
@@ -241,6 +244,14 @@ int ttm_bo_reserve_locked(struct ttm_buffer_object *bo,
}
if (use_sequence) {
+ /**
+ * Wake up waiters that may need to recheck for deadlock,
+ * if we decreased the sequence number.
+ */
+ if (unlikely((bo->val_seq - sequence < (1 << 31))
+ || !bo->seq_valid))
+ wake_up_all(&bo->event_queue);
+
bo->val_seq = sequence;
bo->seq_valid = true;
} else {