[PATCH 35/45] fence-inplace

Chris Wilson chris at chris-wilson.co.uk
Wed Jul 29 20:43:55 UTC 2020


---
 drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
index bdf9274796be..39490ec01a0a 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
@@ -454,7 +454,21 @@ static u64 eb_pin_flags(const struct drm_i915_gem_exec_object2 *entry,
 
 static bool eb_pin_vma_fence_inplace(struct eb_vma *ev)
 {
-	return false; /* We need to add some new fence serialisation */
+	struct i915_vma *vma = ev->vma;
+	struct i915_fence_reg *reg = vma->fence;
+
+	if (reg) {
+		if (READ_ONCE(reg->dirty))
+			return false;
+
+		atomic_inc(&reg->pin_count);
+		ev->flags |= __EXEC_OBJECT_HAS_FENCE;
+	} else {
+		if (i915_gem_object_is_tiled(vma->obj))
+			return false;
+	}
+
+	return true;
 }
 
 static inline bool
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list