Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 22c344e9 authored by Chris Wilson's avatar Chris Wilson Committed by Eric Anholt
Browse files

drm/i915: Check fence status on every pin.



As we may steal the fence register of an unpinned buffer for another,
every time we repin the buffer we need to recheck whether it needs to be
allocated a fence.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarEric Anholt <eric@anholt.net>
parent 9b2412f9
Loading
Loading
Loading
Loading
+15 −8
Original line number Original line Diff line number Diff line
@@ -2730,14 +2730,21 @@ i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment)
				DRM_ERROR("Failure to bind: %d\n", ret);
				DRM_ERROR("Failure to bind: %d\n", ret);
			return ret;
			return ret;
		}
		}
	}
	/*
	/*
	 * Pre-965 chips need a fence register set up in order to
	 * Pre-965 chips need a fence register set up in order to
	 * properly handle tiled surfaces.
	 * properly handle tiled surfaces.
	 */
	 */
	if (!IS_I965G(dev) &&
	if (!IS_I965G(dev) &&
	    obj_priv->fence_reg == I915_FENCE_REG_NONE &&
	    obj_priv->fence_reg == I915_FENCE_REG_NONE &&
		    obj_priv->tiling_mode != I915_TILING_NONE)
	    obj_priv->tiling_mode != I915_TILING_NONE) {
			i915_gem_object_get_fence_reg(obj, true);
		ret = i915_gem_object_get_fence_reg(obj, true);
		if (ret != 0) {
			if (ret != -EBUSY && ret != -ERESTARTSYS)
				DRM_ERROR("Failure to install fence: %d\n",
					  ret);
			return ret;
		}
	}
	}
	obj_priv->pin_count++;
	obj_priv->pin_count++;