[igt-dev] [PATCH i-g-t v2 11/12] i915/gem_mmap_offset: Exercise close race against all types/regions

Kamil Konieczny kamil.konieczny at linux.intel.com
Fri Sep 2 11:58:05 UTC 2022


Hi,

On 2022-09-02 at 09:52:26 +0200, Zbigniew Kempczyński wrote:
> From: Chris Wilson <chris.p.wilson at linux.intel.com>
> 
> Iterate over all mmmap types and memory regions looking for races
> against closing the object.
> 
> Signed-off-by: Chris Wilson <chris.p.wilson at linux.intel.com>
> Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
> Cc: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> ---
>  tests/i915/gem_mmap_offset.c | 41 ++++++++++++++++++------------------
>  1 file changed, 21 insertions(+), 20 deletions(-)
> 
> diff --git a/tests/i915/gem_mmap_offset.c b/tests/i915/gem_mmap_offset.c
> index 281ab2303c..ce911255dd 100644
> --- a/tests/i915/gem_mmap_offset.c
> +++ b/tests/i915/gem_mmap_offset.c
> @@ -491,29 +491,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]));
>  	}
>  
> -- 
> 2.34.1
> 
Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>

--
Kamil



More information about the igt-dev mailing list