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.krzyszto...@linux.intel.com> Cc: Matthew Auld <matthew.a...@intel.com> Cc: Chris Wilson <ch...@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 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx