[Intel-gfx] [PATCH 1/1] drm/i915/gem: Drop relocation support on all new hardware

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Wed Mar 17 10:47:43 UTC 2021


Ensure we don't pass any relocation data in execbuf for any
new hardware.

Patch likely is not optimal but is doing hard cut before
entering execbuf.

Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
Cc: Jason Ekstrand <jason at jlekstrand.net>
Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
---
 .../gpu/drm/i915/gem/i915_gem_execbuffer.c    | 22 +++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
index fe170186dd42..a3b603412448 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
@@ -3394,6 +3394,22 @@ static bool check_buffer_count(size_t count)
 	return !(count < 1 || count > INT_MAX || count > SIZE_MAX / sz - 1);
 }
 
+static bool check_objects_correctness(const struct drm_i915_private *i915,
+				      const struct drm_i915_gem_exec_object2 *objs,
+				      uint32_t buffer_count)
+{
+	uint32_t i;
+
+	if (INTEL_GEN(i915) < 9 || IS_TIGERLAKE(i915))
+		return true;
+
+	for (i = 0; i < buffer_count; i++)
+		if (objs[i].relocation_count)
+			return false;
+
+	return true;
+}
+
 /*
  * Legacy execbuffer just creates an exec2 list from the original exec object
  * list array and passes it to the real function.
@@ -3529,6 +3545,12 @@ i915_gem_execbuffer2_ioctl(struct drm_device *dev, void *data,
 		return -EFAULT;
 	}
 
+	if (!check_objects_correctness(i915, exec2_list, count)) {
+		drm_dbg(&i915->drm, "Relocations are not supported\n");
+		kvfree(exec2_list);
+		return -EINVAL;
+	}
+
 	err = i915_gem_do_execbuffer(dev, file, args, exec2_list);
 
 	/*
-- 
2.26.0



More information about the Intel-gfx mailing list