Browse Source

drm/i915: Handle return value in intel_pin_and_fence_fb_obj, v2.

-EDEADLK has special meaning in atomic, but get_fence may call
i915_find_fence_reg which can return -EDEADLK.

This has special meaning in the atomic world, so convert the error
to -EBUSY for this case.

Changes since v1:
- Add comment in the code.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Maarten Lankhorst 10 years ago
parent
commit
842315ee7e
1 changed files with 12 additions and 1 deletions
  1. 12 1
      drivers/gpu/drm/i915/intel_display.c

+ 12 - 1
drivers/gpu/drm/i915/intel_display.c

@@ -2397,7 +2397,18 @@ intel_pin_and_fence_fb_obj(struct drm_plane *plane,
 	 * a fence as the cost is not that onerous.
 	 * a fence as the cost is not that onerous.
 	 */
 	 */
 	ret = i915_gem_object_get_fence(obj);
 	ret = i915_gem_object_get_fence(obj);
-	if (ret)
+	if (ret == -EDEADLK) {
+		/*
+		 * -EDEADLK means there are no free fences
+		 * no pending flips.
+		 *
+		 * This is propagated to atomic, but it uses
+		 * -EDEADLK to force a locking recovery, so
+		 * change the returned error to -EBUSY.
+		 */
+		ret = -EBUSY;
+		goto err_unpin;
+	} else if (ret)
 		goto err_unpin;
 		goto err_unpin;
 
 
 	i915_gem_object_pin_fence(obj);
 	i915_gem_object_pin_fence(obj);