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 <[email protected]>
> Cc: Zbigniew Kempczyński <[email protected]>
> ---
>  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 <[email protected]>

--
Zbigniew
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to