From patchwork Thu Dec 3 08:39:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chris Wilson X-Patchwork-Id: 11948221 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D4D68C63777 for ; Thu, 3 Dec 2020 08:40:44 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3253B21D1A for ; Thu, 3 Dec 2020 08:40:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3253B21D1A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=chris-wilson.co.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 241406E09C; Thu, 3 Dec 2020 08:40:42 +0000 (UTC) Received: from fireflyinternet.com (unknown [77.68.26.236]) by gabe.freedesktop.org (Postfix) with ESMTPS id A238E6E09C; Thu, 3 Dec 2020 08:40:39 +0000 (UTC) X-Default-Received-SPF: pass (skip=forwardok (res=PASS)) x-ip-name=78.156.65.138; Received: from haswell.alporthouse.com (unverified [78.156.65.138]) by fireflyinternet.com (Firefly Internet (M1)) with ESMTP id 23198367-1500050 for multiple; Thu, 03 Dec 2020 08:40:27 +0000 From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Thu, 3 Dec 2020 08:39:31 +0000 Message-Id: <20201203083931.1370591-1-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t] i915/api_intel_bb: Only assert objects are unmoved for full-ppgtt X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: igt-dev@lists.freedesktop.org, Chris Wilson Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" 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 Cc: Zbigniew Kempczyński Reviewed-by: Zbigniew Kempczyński --- 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);