@@ -355,6 +355,18 @@ int radeon_bo_list_validate(struct list_head *head)
r = ttm_eu_reserve_buffers(head);
if (unlikely(r != 0)) {
+ if (r == -EDEADLK) {
+ /* this is not a GPU lockup, ttm_eu_reserve_buffers
+ * can not trigger detection of GPU lockup. This is
+ * a dead lock trying to reserve the same buffer again
+ * probably because the buffer is know as 2 different
+ * handle by userspace. Print a warning message so
+ * that we know what's going on.
+ */
+ DRM_DEBUG("Dead lock reserving buffer (one buffer is know by userspace under 2 different handle)\n");
+ /* Do not return -EDEADLK to avoid useless GPU reset */
+ return -EINVAL;
+ }
return r;
}
list_for_each_entry(lobj, head, tv.head) {