Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp5964608ybh; Wed, 7 Aug 2019 14:40:02 -0700 (PDT) X-Google-Smtp-Source: APXvYqxVgYIXHGGoNrS9wEHrQdwRzGTgWkEXMwIoHfDAOhkJNX6Zqbg8bZGSLWkhkQKEa++qWyhr X-Received: by 2002:a62:e515:: with SMTP id n21mr11721765pff.186.1565214002609; Wed, 07 Aug 2019 14:40:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565214002; cv=none; d=google.com; s=arc-20160816; b=x2bF1WwbOO8RY3INEidZjj9++MNpcOtGwpS1Vt4GxSnCbqVQShv2j91vVTrii6C7UO Lu778YNNDnMFH7n58zITQg8N7ZsJFqoLEJvvL7vax85DaPWMOjJR1QAXYYpB3jcBYIZQ uZNIQPcPAr4g2kOFyYgAz+8kM2hPRwssyFTclneKwnO6woPVbGeSMc4mqgnfrG+nQ6zu l+QzNs3GUavZX+fIHddkkIhKanG9aJ3j4LHQng3m0+kaR3fRfeBHaUP3uEX8K3zlwKFY FViWuHGJVhL8a4PuQQkkvIZvaTx8upOtw5K7zN2mSYoTt9PKTkvc+iqKDU+KKzn05qL+ 63Gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=7fHjLuiDfc+2J+i8jy03kunddiUwVBWZJV3gJ+JQ4HQ=; b=B2uwi2fDC5XK4BdNh7pm8OPzjsHHQH2zH9zp46U4qUZY3gzT0blRmJJJrg6iMs9zy7 alLAwo7ZFzqePzlfoV9hnOE+ZAsxDxH98mPoVN720xRVmM/ly346kV5cB7r9KxCXpMJK /4LSPBAJzT/U5FRo4pzokytCTWt6lFnnPXkwx0Yo/t2bLf6O2F7VvXh9k26gkv1NDJTs W776MEGXLlgvfCtASJQ7ikiRM4rtRo28sZvc8r/5ljef9lsG6EVw5N1AqIB5MvtdM8Nb 0DqwhCCXBAcKxdwZbeYCceWiO3iFg+dJ/yIFoo51ePWFbQp79HRlhp7HBMdH9sCWvk+5 i8NA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bf7si45390560plb.216.2019.08.07.14.39.47; Wed, 07 Aug 2019 14:40:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389500AbfHGVdV (ORCPT + 99 others); Wed, 7 Aug 2019 17:33:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52874 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389484AbfHGVdU (ORCPT ); Wed, 7 Aug 2019 17:33:20 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8AE053DE02; Wed, 7 Aug 2019 21:33:20 +0000 (UTC) Received: from whitewolf.redhat.com (ovpn-121-222.rdu2.redhat.com [10.10.121.222]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6F0ED600C6; Wed, 7 Aug 2019 21:33:19 +0000 (UTC) From: Lyude Paul To: nouveau@lists.freedesktop.org Cc: Ben Skeggs , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] drm/nouveau/dispnv04: Grab/put runtime PM refs on DPMS on/off Date: Wed, 7 Aug 2019 17:33:00 -0400 Message-Id: <20190807213304.9255-2-lyude@redhat.com> In-Reply-To: <20190807213304.9255-1-lyude@redhat.com> References: <20190807213304.9255-1-lyude@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 07 Aug 2019 21:33:20 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The code claims to grab a runtime PM ref when at least one CRTC is active, but that's not actually the case as we grab a runtime PM ref whenever a CRTC is enabled regardless of it's DPMS state. Meaning that we can end up keeping the GPU awake when there are no screens enabled, something we don't really want to do. Note that we fixed this same issue for nv50 a while ago in: commit e5d54f193572 ("drm/nouveau/drm/nouveau: Fix runtime PM leak in nv50_disp_atomic_commit()") Since we're about to remove nouveau_drm->have_disp_power_ref in the next commit, let's also simplify the RPM code here while we're at it: grab a ref during a modeset, grab additional RPM refs for each CRTC enabled by said modeset, and drop an RPM ref for each CRTC disabled by said modeset. This allows us to keep the GPU awake whenever screens are turned on, without needing to use nouveau_drm->have_disp_power_ref. Signed-off-by: Lyude Paul --- drivers/gpu/drm/nouveau/dispnv04/crtc.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c b/drivers/gpu/drm/nouveau/dispnv04/crtc.c index f22f01020625..08ad8e3b9cd2 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c +++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c @@ -183,6 +183,10 @@ nv_crtc_dpms(struct drm_crtc *crtc, int mode) return; nv_crtc->last_dpms = mode; + if (mode == DRM_MODE_DPMS_ON) + pm_runtime_get_noresume(dev->dev); + else + pm_runtime_put_noidle(dev->dev); if (nv_two_heads(dev)) NVSetOwner(dev, nv_crtc->index); @@ -1045,7 +1049,6 @@ nouveau_crtc_set_config(struct drm_mode_set *set, dev = set->crtc->dev; - /* get a pm reference here */ ret = pm_runtime_get_sync(dev->dev); if (ret < 0 && ret != -EACCES) return ret; @@ -1061,19 +1064,6 @@ nouveau_crtc_set_config(struct drm_mode_set *set, } pm_runtime_mark_last_busy(dev->dev); - /* if we have active crtcs and we don't have a power ref, - take the current one */ - if (active && !drm->have_disp_power_ref) { - drm->have_disp_power_ref = true; - return ret; - } - /* if we have no active crtcs, then drop the power ref - we got before */ - if (!active && drm->have_disp_power_ref) { - pm_runtime_put_autosuspend(dev->dev); - drm->have_disp_power_ref = false; - } - /* drop the power reference we got coming in here */ pm_runtime_put_autosuspend(dev->dev); return ret; } -- 2.21.0