From patchwork Sat Jan 14 16:23:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Wilson X-Patchwork-Id: 9517061 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 9DCF0601DA for ; Sat, 14 Jan 2017 16:23:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 93410284D6 for ; Sat, 14 Jan 2017 16:23:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 882C9284E6; Sat, 14 Jan 2017 16:23:45 +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 444EA284D6 for ; Sat, 14 Jan 2017 16:23:45 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 79DB46E148; Sat, 14 Jan 2017 16:23:44 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id B02716E148 for ; Sat, 14 Jan 2017 16:23:40 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id r126so19296972wmr.3 for ; Sat, 14 Jan 2017 08:23:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=GfcW08NJ4KAwsVyPGqytXd4kykAWmZYmzJ4dAXqu/hI=; b=iSDeMPeKQX31YL+9JnM8W63YHs8fXsPulI60FzZkSgcIWtPgDlYMZkXEeiMtElPX8H H602vZxbQmStCHm3pW5hD6Spofnm+aTDabBIIxHvwIMOLUaCZMLbkItLB40XiS5ftZmG 7fn5ISEOKCotW5+tQ61c3FcyebKQ43uniSmC1D/B3dEo+0cE1gYGGvFC3aZSY2rqxRaJ CGAs82qdmjXycAX/l3y71Y2OKQeaHIwWHI3FufCj0v/93Eo8o61hMa24NZlsoB4Kb+5i +9R+GO/IbIReLc+fstSsgojeFfznsNtiRD9Z3DyqRjeFVUyx2gombptOG2TYz+ye+RJb M96A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=GfcW08NJ4KAwsVyPGqytXd4kykAWmZYmzJ4dAXqu/hI=; b=BQZICw3qd39loEuXoGUQ3MlNWbgdpzG/mNyFoTC17EL9XPhqHpKGEvJuoWJrOIwWsT qIHNAxeg7/laEpapERhq2Ihwc1KcS4LGDnuG+HJbQnrxRbCgJoR5Yk8w+ht2HaS3carn ub5iZOuRT1XaURk72iNUY2VynfszE/Gids7m+W8M0XftswlhYyc6XPw1vm8H93/4cx9G Dc99Z5+dYbmc4NrTLgzublzkcvUn+YCKf4aKiSrnNSMvQs93ujplUeSjHW6sd82Chdqp +uVlVyN7Fp/g+DX8oUzFBINiMGrr3NuyThk5XKqD7yXIp446klup9wfMz+FYRPpXHXGL oC0w== X-Gm-Message-State: AIkVDXInJbx9rTP0Qhl77WOohESSXkQBexK1qkQS+6iMZ/LY++5k2cWTWDgQGrHxIRt9cw== X-Received: by 10.28.222.11 with SMTP id v11mr6001363wmg.1.1484411019270; Sat, 14 Jan 2017 08:23:39 -0800 (PST) Received: from haswell.alporthouse.com ([78.156.65.138]) by smtp.gmail.com with ESMTPSA id y145sm13810869wmc.17.2017.01.14.08.23.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 14 Jan 2017 08:23:38 -0800 (PST) From: Chris Wilson To: intel-gfx@lists.freedesktop.org Date: Sat, 14 Jan 2017 16:23:34 +0000 Message-Id: <20170114162334.10271-2-chris@chris-wilson.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170114162334.10271-1-chris@chris-wilson.co.uk> References: <20170114162334.10271-1-chris@chris-wilson.co.uk> Subject: [Intel-gfx] [PATCH 2/2] drm/i915: Skip switch to kernel context if already done 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 Some engines are never user or already sitting idle in the kernel context and for those we can skip flushing the current context for i915_gem_switch_to_kernel_context(). We used to perform this optimisation but that was removed for convenience of converting over to multiple timelines and handling the pending request queues. From the perspective of writing selftests, reducing the number of background operations on the engines makes defining assertions easier. Signed-off-by: Chris Wilson Reviewed-by: Joonas Lahtinen --- drivers/gpu/drm/i915/i915_gem.c | 3 ++- drivers/gpu/drm/i915/i915_gem_context.c | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index d4c59b53532e..83cd2eff37af 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -4140,7 +4140,8 @@ static void assert_kernel_context_is_current(struct drm_i915_private *dev_priv) enum intel_engine_id id; for_each_engine(engine, dev_priv, id) - GEM_BUG_ON(!i915_gem_context_is_kernel(engine->last_retired_context)); + GEM_BUG_ON(engine->last_retired_context && + !i915_gem_context_is_kernel(engine->last_retired_context)); } int i915_gem_suspend(struct drm_i915_private *dev_priv) diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c index ae99c25397ca..0a4728fdecdc 100644 --- a/drivers/gpu/drm/i915/i915_gem_context.c +++ b/drivers/gpu/drm/i915/i915_gem_context.c @@ -877,6 +877,26 @@ int i915_switch_context(struct drm_i915_gem_request *req) return do_rcs_switch(req); } +static bool engine_has_kernel_context(struct intel_engine_cs *engine) +{ + struct i915_gem_timeline *timeline; + + list_for_each_entry(timeline, &engine->i915->gt.timelines, link) { + struct intel_timeline *tl; + + if (timeline == &engine->i915->gt.global_timeline) + continue; + + tl = &timeline->engine[engine->id]; + if (i915_gem_active_peek(&tl->last_request, + &engine->i915->drm.struct_mutex)) + return false; + } + + return (!engine->last_retired_context || + i915_gem_context_is_kernel(engine->last_retired_context)); +} + int i915_gem_switch_to_kernel_context(struct drm_i915_private *dev_priv) { struct intel_engine_cs *engine; @@ -885,10 +905,15 @@ int i915_gem_switch_to_kernel_context(struct drm_i915_private *dev_priv) lockdep_assert_held(&dev_priv->drm.struct_mutex); + i915_gem_retire_requests(dev_priv); + for_each_engine(engine, dev_priv, id) { struct drm_i915_gem_request *req; int ret; + if (engine_has_kernel_context(engine)) + continue; + req = i915_gem_request_alloc(engine, dev_priv->kernel_context); if (IS_ERR(req)) return PTR_ERR(req);