From patchwork Mon Jan 30 15:25:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maarten Lankhorst X-Patchwork-Id: 9545613 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 3EBDC60415 for ; Mon, 30 Jan 2017 15:25:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2E7A428210 for ; Mon, 30 Jan 2017 15:25:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 236EC2823E; Mon, 30 Jan 2017 15:25:13 +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.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED 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 AE0FB28210 for ; Mon, 30 Jan 2017 15:25:12 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6EE176E523; Mon, 30 Jan 2017 15:25:11 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3BECD6E523; Mon, 30 Jan 2017 15:25:10 +0000 (UTC) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga102.jf.intel.com with ESMTP; 30 Jan 2017 07:25:09 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,312,1477983600"; d="scan'208";a="37339179" Received: from dkeohane-mobl.ger.corp.intel.com (HELO patser.lan) ([10.252.26.125]) by orsmga002.jf.intel.com with ESMTP; 30 Jan 2017 07:25:08 -0800 Subject: [PATCH] drm/i915: Skip modeset locking when atomic pageflips are used. To: Daniel Vetter , Chris Wilson , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <1485446364-19174-1-git-send-email-maarten.lankhorst@linux.intel.com> <20170127093050.GK19521@nuc-i3427.alporthouse.com> <20170127142129.cgdoelv6oeqeu6r3@phenom.ffwll.local> <20170127143155.GD24154@nuc-i3427.alporthouse.com> <20170127145808.wfaf73lnbfommdjw@phenom.ffwll.local> <20170127150845.GG24154@nuc-i3427.alporthouse.com> <20170130081751.mj2dt6cytmh7se7b@phenom.ffwll.local> From: Maarten Lankhorst Message-ID: <48e9e6f5-b6a6-5605-b78f-61e99568b29d@linux.intel.com> Date: Mon, 30 Jan 2017 16:25:07 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: <20170130081751.mj2dt6cytmh7se7b@phenom.ffwll.local> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP With the atomic helper for pageflips there are no CS flips when that require resetting, so on most platforms we can completely skip the locking. Because we may end up reverting the page_flip patch add an explicit function pointer check so that if someone reverts the page flip patch there will not be any issues if this is forgotten. Signed-off-by: Maarten Lankhorst Testcase: kms_busy.extended-modeset-hang-oldfb-* --- This is a standalone patch to fix modeset hangs on g4x+. The path for gen4 and lower is simulated in kms_busy.extended-modeset-hang-oldfb-with-reset and still fails. drivers/gpu/drm/i915/intel_display.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index d8db1caec1b8..1dd480a6752a 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -3529,6 +3529,8 @@ static bool gpu_reset_clobbers_display(struct drm_i915_private *dev_priv) INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv); } +static const struct drm_crtc_funcs intel_crtc_funcs; + void intel_prepare_reset(struct drm_i915_private *dev_priv) { struct drm_device *dev = &dev_priv->drm; @@ -3536,6 +3538,11 @@ void intel_prepare_reset(struct drm_i915_private *dev_priv) struct drm_atomic_state *state; int ret; + if (intel_crtc_funcs.page_flip == drm_atomic_helper_page_flip && + !i915.force_reset_modeset_test && + !gpu_reset_clobbers_display(dev_priv)) + return; + /* * Need mode_config.mutex so that we don't * trample ongoing ->detect() and whatnot. @@ -3584,6 +3591,11 @@ void intel_finish_reset(struct drm_i915_private *dev_priv) struct drm_atomic_state *state = dev_priv->modeset_restore_state; int ret; + if (intel_crtc_funcs.page_flip == drm_atomic_helper_page_flip && + !i915.force_reset_modeset_test && + !gpu_reset_clobbers_display(dev_priv)) + return; + /* * Flips in the rings will be nuked by the reset, * so complete all pending flips so that user space