[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