|
@@ -2389,22 +2389,24 @@ intel_pin_and_fence_fb_obj(struct drm_plane *plane,
|
|
|
* framebuffer compression. For simplicity, we always install
|
|
|
* a fence as the cost is not that onerous.
|
|
|
*/
|
|
|
- ret = i915_gem_object_get_fence(obj);
|
|
|
- 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;
|
|
|
+ if (view.type == I915_GGTT_VIEW_NORMAL) {
|
|
|
+ ret = i915_gem_object_get_fence(obj);
|
|
|
+ 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;
|
|
|
|
|
|
- i915_gem_object_pin_fence(obj);
|
|
|
+ i915_gem_object_pin_fence(obj);
|
|
|
+ }
|
|
|
|
|
|
dev_priv->mm.interruptible = true;
|
|
|
intel_runtime_pm_put(dev_priv);
|
|
@@ -2430,7 +2432,9 @@ static void intel_unpin_fb_obj(struct drm_framebuffer *fb,
|
|
|
ret = intel_fill_fb_ggtt_view(&view, fb, plane_state);
|
|
|
WARN_ONCE(ret, "Couldn't get view from plane state!");
|
|
|
|
|
|
- i915_gem_object_unpin_fence(obj);
|
|
|
+ if (view.type == I915_GGTT_VIEW_NORMAL)
|
|
|
+ i915_gem_object_unpin_fence(obj);
|
|
|
+
|
|
|
i915_gem_object_unpin_from_display_plane(obj, &view);
|
|
|
}
|
|
|
|