diff mbox

drm/radeon: Catch reservation deadlock on same buffer with different handle v2

Message ID 1360788524-4515-1-git-send-email-j.glisse@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jerome Glisse Feb. 13, 2013, 8:48 p.m. UTC
From: Jerome Glisse <jglisse@redhat.com>

This patch print a warning message when trying to reserve same buffer
twice in same cs ioctl (because the buffer is known by userspace under
2 different handle). It does not try to fix the issue like :

https://patchwork.kernel.org/patch/1812991/

Just to make this case easier to debug.

v2: Make message a debug one not an error

Cc: stable@vger.kernel.org
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
---
 drivers/gpu/drm/radeon/radeon_object.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)
diff mbox

Patch

diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index d3aface..624ea8c 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -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) {