[Intel-gfx] [RFC PATCH i-g-t 1/1] tests/gem_mmap_offset: Exercise mapping to userptr
Janusz Krzysztofik
janusz.krzysztofik at linux.intel.com
Fri Jan 31 13:12:34 UTC 2020
Creating a mapping to a userptr backed GEM object may cause a currently
unavoidable lockdep splat inside the i915 driver. Then, such operation
is expected to fail to prevent from that badness to happen.
Add a respective subtest for each mapping type.
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik at linux.intel.com>
Cc: Matthew Auld <matthew.auld at intel.com>
Cc: Chris Wilson <chris at chris-wilson.co.uk>
---
tests/i915/gem_mmap_offset.c | 55 ++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/tests/i915/gem_mmap_offset.c b/tests/i915/gem_mmap_offset.c
index 7c4088cdf..a5f28328b 100644
--- a/tests/i915/gem_mmap_offset.c
+++ b/tests/i915/gem_mmap_offset.c
@@ -141,6 +141,36 @@ static void bad_extensions(int i915)
gem_close(i915, arg.handle);
}
+static bool has_userptr(int i915)
+{
+ uint32_t handle = 0;
+ void *ptr;
+
+ igt_assert_eq(posix_memalign(&ptr, 4096, 4096), 0);
+ if (__gem_userptr(i915, ptr, 4096, 0, 0, &handle) == 0)
+ gem_close(i915, handle);
+ free(ptr);
+
+ return handle;
+}
+
+static void userptr(int i915, uint64_t flags)
+{
+ struct drm_i915_gem_mmap_offset arg = {
+ .flags = flags,
+ };
+ void *ptr;
+
+ igt_assert_eq(posix_memalign(&ptr, 4096, 4096), 0);
+
+ gem_userptr(i915, ptr, 4096, 0, 0, &arg.handle);
+
+ igt_assert_eq(mmap_offset_ioctl(i915, &arg), -EINVAL);
+
+ gem_close(i915, arg.handle);
+ free(ptr);
+}
+
static void basic_uaf(int i915)
{
const uint32_t obj_size = 4096;
@@ -461,6 +491,31 @@ igt_main
igt_subtest_f("bad-extensions")
bad_extensions(i915);
+ igt_subtest_group {
+ igt_fixture
+ igt_require(has_userptr(i915));
+
+ for_each_mmap_offset_type(t) {
+ igt_describe_f("Verify %s mapping to userptr backed GEM object will fail",
+ t->name);
+ igt_subtest_f("userptr-%s-mapping", t->name) {
+ switch (t->type) {
+ case I915_MMAP_OFFSET_GTT:
+ gem_require_mappable_ggtt(i915);
+ break;
+ case I915_MMAP_OFFSET_WC:
+ case I915_MMAP_OFFSET_UC:
+ igt_require(gem_mmap_offset__has_wc(i915));
+ break;
+ defalut:
+ break;
+ }
+
+ userptr(i915, t->type);
+ }
+ }
+ }
+
igt_describe("Check buffer object mapping persists after gem_close");
igt_subtest_f("basic-uaf")
basic_uaf(i915);
--
2.21.0
More information about the Intel-gfx
mailing list