From patchwork Tue Aug 16 10:42:47 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Wilson X-Patchwork-Id: 9283293 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id ED48A607FD for ; Tue, 16 Aug 2016 10:43:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DD9A2285CE for ; Tue, 16 Aug 2016 10:43:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D255F285D2; Tue, 16 Aug 2016 10:43:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 8BA8B285CE for ; Tue, 16 Aug 2016 10:43:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 11F916E65D; Tue, 16 Aug 2016 10:43:44 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2606E6E66C for ; Tue, 16 Aug 2016 10:43:26 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id o80so15726083wme.0 for ; Tue, 16 Aug 2016 03:43:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=cRMWBjj7BXQicmBrZBf2XW8bvBPA4sUsTUj34EbVQq8=; b=OVUfwQTRVWgnIJC698Ct6UioG/Jrkoo6md1nUFgm55mKkIiut2jSiY2kAF0xdCl78g coBSLIcYMZFmJXHaZQwuTq/gMZXSOnYcsq4nk9cXuwHh6tXfu0mcEvrBL7jfU40KkBmt gkYlm0lOuVeXfCSetoplDYxTmwDh+sC2u8o3Yv/3vXmEcuhNJM/1FVFt/RFPy9M7MYmb ZGmyOKelqb73bK8Q16TKpH2vvzB7wtA0gSTNcidKF34bNlennVHP9L5D+goDjYCHa128 OIHTOo1Lwc3jOKlJW6lzqJW7dSziyrIgHbmUUVLfnWlUJtUhGRQxbAl/xMZOKKP00UtY 7h5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=cRMWBjj7BXQicmBrZBf2XW8bvBPA4sUsTUj34EbVQq8=; b=Mw3539xESgduV4a8L82e6/zlbAQdhts3/gsZg1t0jImrx97HKnKd0yYrgBrIemvEzE dz8bmLyRhgbRJOk9NUEngKyFAJHlNGkXj04Q7LPRMvo3xCm/c3tqf3qZmHvOZjjhkEQ4 LdMKh+4icWBYqUB+A4bdKyPiQeXIgyZDohIXLWrTXijToOUCZ3U5+pSsfRwieJ8YSYT1 Yt/ceFUf9js8DhMa+zY4I1lQrdclLiPjcu8OyGP5yuP/itBzEc2PAC2U6iaQqKRAsoWt fyD1s8crutrqRpdFaQ/a+LrhN0TOgJzRJpOHeS4av7Sq9cIfRu4DR0/IPv0Il34+3li/ IbJw== X-Gm-Message-State: AEkooutFjrxf2BipmNxt9ZR63+L2GGDuz4Ia1/EyzalYd4mkTbU8mBhhfSbaQhOsdPeAFg== X-Received: by 10.194.186.231 with SMTP id fn7mr36955946wjc.164.1471344204631; Tue, 16 Aug 2016 03:43:24 -0700 (PDT) Received: from haswell.alporthouse.com ([78.156.65.138]) by smtp.gmail.com with ESMTPSA id d62sm21175546wmd.7.2016.08.16.03.43.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Aug 2016 03:43:23 -0700 (PDT) From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Tue, 16 Aug 2016 11:42:47 +0100 Message-Id: <1471344168-28136-22-git-send-email-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1471344168-28136-1-git-send-email-chris@chris-wilson.co.uk> References: <1471344168-28136-1-git-send-email-chris@chris-wilson.co.uk> Subject: [Intel-gfx] [PATCH 21/22] drm/i915: Bump the inactive tracking for all VMA accessed X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP We track the LRU access for eviction and bump the last access for the user GGTT on set-to-gtt. When we do so we need to not only bump the primary GGTT VMA but all partials as well. Similarly we want to bump the last access tracking for when unpinning an object from the scanout so that they do not get promptly evicted and hopefully remain available for reuse on the next frame. Signed-off-by: Chris Wilson Reviewed-by: Joonas Lahtinen --- drivers/gpu/drm/i915/i915_gem.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index a76dffd3fbd7..ab3c96f09050 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -3242,6 +3242,24 @@ i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj) I915_GEM_DOMAIN_CPU); } +static void i915_gem_object_bump_inactive_ggtt(struct drm_i915_gem_object *obj) +{ + struct i915_vma *vma; + + list_for_each_entry(vma, &obj->vma_list, obj_link) { + if (!i915_vma_is_ggtt(vma)) + continue; + + if (i915_vma_is_active(vma)) + continue; + + if (!drm_mm_node_allocated(&vma->node)) + continue; + + list_move_tail(&vma->vm_link, &vma->vm->inactive_list); + } +} + /** * Moves a single object to the GTT read, and possibly write domain. * @obj: object to act on @@ -3254,7 +3272,6 @@ int i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write) { uint32_t old_write_domain, old_read_domains; - struct i915_vma *vma; int ret; ret = i915_gem_object_wait_rendering(obj, !write); @@ -3304,11 +3321,7 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write) old_write_domain); /* And bump the LRU for this access */ - vma = i915_gem_object_to_ggtt(obj, NULL); - if (vma && - drm_mm_node_allocated(&vma->node) && - !i915_vma_is_active(vma)) - list_move_tail(&vma->vm_link, &vma->vm->inactive_list); + i915_gem_object_bump_inactive_ggtt(obj); return 0; } @@ -3611,6 +3624,10 @@ i915_gem_object_unpin_from_display_plane(struct i915_vma *vma) if (--vma->obj->pin_display == 0) vma->display_alignment = 0; + /* Bump the LRU to try and avoid premature eviction whilst flipping */ + if (!i915_vma_is_active(vma)) + list_move_tail(&vma->vm_link, &vma->vm->inactive_list); + i915_vma_unpin(vma); WARN_ON(vma->obj->pin_display > i915_vma_pin_count(vma)); }