Эх сурвалжийг харах

drm/vmwgfx: use rcu in vmw_user_dmabuf_synccpu_grab

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Maarten Lankhorst 11 жил өмнө
parent
commit
5fbad9928f

+ 10 - 6
drivers/gpu/drm/vmwgfx/vmwgfx_resource.c

@@ -568,13 +568,17 @@ static int vmw_user_dmabuf_synccpu_grab(struct vmw_user_dma_buffer *user_bo,
 
 	if (flags & drm_vmw_synccpu_allow_cs) {
 		bool nonblock = !!(flags & drm_vmw_synccpu_dontblock);
+		long lret;
 
-		ret = ttm_bo_reserve(bo, true, nonblock, false, NULL);
-		if (!ret) {
-			ret = ttm_bo_wait(bo, false, true, nonblock);
-			ttm_bo_unreserve(bo);
-		}
-		return ret;
+		if (nonblock)
+			return reservation_object_test_signaled_rcu(bo->resv, true) ? 0 : -EBUSY;
+
+		lret = reservation_object_wait_timeout_rcu(bo->resv, true, true, MAX_SCHEDULE_TIMEOUT);
+		if (!lret)
+			return -EBUSY;
+		else if (lret < 0)
+			return lret;
+		return 0;
 	}
 
 	ret = ttm_bo_synccpu_write_grab