[igt-dev] [PATCH i-g-t] i915/api_intel_bb: Only assert objects are unmoved for full-ppgtt

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Thu Dec 3 10:34:23 UTC 2020


On Thu, Dec 03, 2020 at 08:39:31AM +0000, Chris Wilson wrote:
> If we let an object idle in a shared GTT, it may be evicted by the
> kernel in favour of another client. Thus, we have to be very careful
> when asserting that two different executions of the same object will
> be at the same address. If there's an idle point between the two
> asserts, it will only be guaranteed to hold for full-ppgtt.
> 
> Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/2754
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
> ---
>  tests/i915/api_intel_bb.c | 19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/i915/api_intel_bb.c b/tests/i915/api_intel_bb.c
> index 0cb3192cb..18814d14d 100644
> --- a/tests/i915/api_intel_bb.c
> +++ b/tests/i915/api_intel_bb.c
> @@ -505,10 +505,21 @@ static void blit(struct buf_ops *bops,
>  	intel_bb_exec(ibb, intel_bb_offset(ibb), flags, true);
>  	check_buf(dst, COLOR_77);
>  
> -	poff2_src = intel_bb_get_object_offset(ibb, src->handle);
> -	poff2_dst = intel_bb_get_object_offset(ibb, dst->handle);
> -	igt_assert(poff_src == poff2_src);
> -	igt_assert(poff_dst == poff2_dst);
> +	/*
> +	 * Since we let the objects idle, if the GTT is shared another client
> +	 * is liable to reuse our offsets for themselves, causing us to have
> +	 * to relocate. We don't expect this to happen as LRU eviction should
> +	 * try to avoid reuse, but we use random eviction instead as it is
> +	 * much quicker! Given that the kernel is *allowed* to relocate objects,
> +	 * we cannot assert that the objects remain in the same location, unless
> +	 * we are in full control of our own GTT.
> +	 */
> +	if (gem_uses_full_ppgtt(i915)) {
> +		igt_assert_eq_u64(intel_bb_get_object_offset(ibb, src->handle),
> +				  poff_src);
> +		igt_assert_eq_u64(intel_bb_get_object_offset(ibb, dst->handle),
> +				  poff_dst);
> +	}
>  
>  	intel_buf_destroy(src);
>  	intel_buf_destroy(dst);
> -- 
> 2.29.2
> 

Patch looks ok. BTW is it possible when we're running the test in isolated
environment (IGT)?

Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>

--
Zbigniew


More information about the igt-dev mailing list