summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris.p.wilson@linux.intel.com>2022-09-02 15:00:06 +0200
committerKamil Konieczny <kamil.konieczny@linux.intel.com>2022-09-29 11:52:41 +0200
commit3d2df081c14c251e0269e3510ddc4e9d26ffe925 (patch)
tree3001f6c3d591c5eb368fca5d259b234093279c9f
parent5f29c9369550164b35b65baaaeba4b370f434cf1 (diff)
i915/gem_mmap_offset: Exercise close race against all types/regions
Iterate over all mmmap types and memory regions looking for races against closing the object. Signed-off-by: Chris Wilson <chris.p.wilson@linux.intel.com> Signed-off-by: Zbigniew KempczyƄski <zbigniew.kempczynski@intel.com> Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com> Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>
-rw-r--r--tests/i915/gem_mmap_offset.c41
1 files changed, 21 insertions, 20 deletions
diff --git a/tests/i915/gem_mmap_offset.c b/tests/i915/gem_mmap_offset.c
index 7e8c02d17..f51d7e38f 100644
--- a/tests/i915/gem_mmap_offset.c
+++ b/tests/i915/gem_mmap_offset.c
@@ -558,29 +558,30 @@ static void close_race(int i915, int timeout)
igt_fork(child, ncpus + 1) {
do {
- struct drm_i915_gem_mmap_offset mmap_arg = {};
- const int i = 1 + random() % ncpus;
- uint32_t old;
-
- mmap_arg.handle = gem_create(i915, 4096);
- mmap_arg.flags = I915_MMAP_OFFSET_WB;
- old = atomic_exchange(&handles[i], mmap_arg.handle);
- ioctl(i915, DRM_IOCTL_GEM_CLOSE, &old);
-
- if (ioctl(i915,
- DRM_IOCTL_I915_GEM_MMAP_OFFSET,
- &mmap_arg) != -1) {
- void *ptr;
-
- ptr = mmap64(0, 4096,
- PROT_WRITE, MAP_SHARED, i915,
- mmap_arg.offset);
- if (ptr != MAP_FAILED) {
+ for_each_memory_region(r, i915) {
+ const int i = 1 + random() % ncpus;
+ uint64_t size = 4096;
+ uint32_t bo, old;
+
+ igt_assert_eq(__gem_create_in_memory_region_list(i915, &bo, &size, 0, &r->ci, 1), 0);
+ make_resident(i915, 0, bo);
+
+ old = atomic_exchange(&handles[i], bo);
+ ioctl(i915, DRM_IOCTL_GEM_CLOSE, &old);
+
+ for_each_mmap_offset_type(i915, t) {
+ void *ptr;
+
+ ptr = __mmap_offset(i915, bo, 0, size,
+ PROT_READ | PROT_WRITE,
+ t->type);
+ if (!ptr)
+ continue;
+
*(volatile uint32_t *)ptr = 0;
- munmap(ptr, 4096);
+ munmap(ptr, size);
}
}
-
} while (!READ_ONCE(handles[0]));
}