[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