Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp5468830pxu; Tue, 22 Dec 2020 19:05:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJzGnCvRFWpoKBBnELVfupRzhSSaF6LsmXRlgF8/Rsps9Izgawwa89ONh6gJ3hI8GquupsNV X-Received: by 2002:a50:ab51:: with SMTP id t17mr23060576edc.89.1608692735291; Tue, 22 Dec 2020 19:05:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1608692735; cv=none; d=google.com; s=arc-20160816; b=SPg5SpFJqWvNKFDrW/qCqGTt8ZdOQZyMbdbwXicjl6uE0BngqHaNvQaBCxo0JT/WKk ZRJkWtga2FU29Wgd18umyJrmG3mNYnjsGCj6YxJNbfIPDLC/J0+wm14tTisJEhVb9dai N1lHrWsgrSsvh/sJ5k6XudZcBn8xbvoJWdKYLRqT961MjKKwytV2Jty8YUuOZVdcKHVn y320inFDoG4idQvPGm24saO+JGWFcquZ0n7v/RgGkRxy9tsW1CKb22BrhMihjoCMkBWh 4WI9tMraTCv4K7iXdlADvLc9qhz/lIrgOitCpHCwI++h2w3obT/A/0oPAjq2WPXzd0kj mejQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=R0lD/QtXy72/mBDlEVCajFS2lcuIqDx5YgPed68kF4E=; b=RGttLqgec78UDwQP8k4CAO6vG4BOw62EB1G6Z7kxVjdnxz8vTaHnycjXCcSkDshyKC Ch0vJY/ZR1LSgWdzOCZLgbXLALU7OO4r731CUA8Jgs7A8qtOuU3eh/H1Xn0rjKf23ghi iqCBR7jkm5ckheZfP+W8Ks652DcOsU64BWGH6DoaCkdZt85oQHgHtjae0Ku7SPt+iWLi rHYOK50qBXO5JwFndupH+/B2/gDyyK2ofILO+ef52y0TqpeC6oWFqZKjQk5HMuMv0Dbj wr3B+hl4vX1SyhNss0P3F7UZztZtjI2kv9sXqcqo1760uo50VGi1/mBdYOF+W8s8z7vb vBKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=rwwR1CT8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 61si13106275edk.598.2020.12.22.19.05.13; Tue, 22 Dec 2020 19:05:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=rwwR1CT8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729123AbgLWDDg (ORCPT + 99 others); Tue, 22 Dec 2020 22:03:36 -0500 Received: from mail.kernel.org ([198.145.29.99]:45428 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728632AbgLWCT1 (ORCPT ); Tue, 22 Dec 2020 21:19:27 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 24F2023381; Wed, 23 Dec 2020 02:18:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1608689932; bh=meK32/YyFfNWQD6sqkHF3xM9gn6SguVzcEkYXIDA9Qo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rwwR1CT8JMvnDI/A2zXyMyOipb07y2dkUZFi/7M/Q8MQgk4KTKaLu2AI+2c3RzYXv pZMuDQUrJbO12aODQaqvqi5pT/ggX+gYgIo/kUvxkaFqZ186ogxJrAHfsGvvQAlqaH FPTGI8ql5DLEMO1XoXc+iO5CDe/j/SwC80pg5Z+vUpUa2iNWWaNayATh+RWuD1btOq B43wQPS1oO6mR5xl8DWb73/uTtKNZCkX4F8NFrmp7jmVU5xPh/GhJXFH348GsGYT2u cuEOhbwBKes6S7Teel4SncnMMbB6YaZb32SBflYs0ocu/tKTUOj1F8Xiam0idEIASW kUFlZho7/+zmw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Dinghao Liu , Tomi Valkeinen , Sasha Levin , dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 5.4 030/130] drm/omap: Fix runtime PM imbalance on error Date: Tue, 22 Dec 2020 21:16:33 -0500 Message-Id: <20201223021813.2791612-30-sashal@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201223021813.2791612-1-sashal@kernel.org> References: <20201223021813.2791612-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dinghao Liu [ Upstream commit a5d704d33245b0799947a3008f9f376dba4d5c91 ] pm_runtime_get_sync() increments the runtime PM usage counter even when it returns an error code. However, users of its direct wrappers in omapdrm assume that PM usage counter will not change on error. Thus a pairing decrement is needed on the error handling path for these wrappers to keep the counter balanced. Signed-off-by: Dinghao Liu Signed-off-by: Tomi Valkeinen Link: https://patchwork.freedesktop.org/patch/msgid/20200822065743.13671-1-dinghao.liu@zju.edu.cn Signed-off-by: Sasha Levin --- drivers/gpu/drm/omapdrm/dss/dispc.c | 7 +++++-- drivers/gpu/drm/omapdrm/dss/dsi.c | 7 +++++-- drivers/gpu/drm/omapdrm/dss/dss.c | 7 +++++-- drivers/gpu/drm/omapdrm/dss/hdmi4.c | 6 +++--- drivers/gpu/drm/omapdrm/dss/hdmi5.c | 6 +++--- drivers/gpu/drm/omapdrm/dss/venc.c | 7 +++++-- 6 files changed, 26 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c index ed0ccbeed70f2..d31ce81f03e7c 100644 --- a/drivers/gpu/drm/omapdrm/dss/dispc.c +++ b/drivers/gpu/drm/omapdrm/dss/dispc.c @@ -664,8 +664,11 @@ int dispc_runtime_get(struct dispc_device *dispc) DSSDBG("dispc_runtime_get\n"); r = pm_runtime_get_sync(&dispc->pdev->dev); - WARN_ON(r < 0); - return r < 0 ? r : 0; + if (WARN_ON(r < 0)) { + pm_runtime_put_noidle(&dispc->pdev->dev); + return r; + } + return 0; } void dispc_runtime_put(struct dispc_device *dispc) diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c index b30fcaa2d0f55..a821359879922 100644 --- a/drivers/gpu/drm/omapdrm/dss/dsi.c +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c @@ -1112,8 +1112,11 @@ static int dsi_runtime_get(struct dsi_data *dsi) DSSDBG("dsi_runtime_get\n"); r = pm_runtime_get_sync(dsi->dev); - WARN_ON(r < 0); - return r < 0 ? r : 0; + if (WARN_ON(r < 0)) { + pm_runtime_put_noidle(dsi->dev); + return r; + } + return 0; } static void dsi_runtime_put(struct dsi_data *dsi) diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c index ac93dae2a9c84..f4fedaa7b6b33 100644 --- a/drivers/gpu/drm/omapdrm/dss/dss.c +++ b/drivers/gpu/drm/omapdrm/dss/dss.c @@ -858,8 +858,11 @@ int dss_runtime_get(struct dss_device *dss) DSSDBG("dss_runtime_get\n"); r = pm_runtime_get_sync(&dss->pdev->dev); - WARN_ON(r < 0); - return r < 0 ? r : 0; + if (WARN_ON(r < 0)) { + pm_runtime_put_noidle(&dss->pdev->dev); + return r; + } + return 0; } void dss_runtime_put(struct dss_device *dss) diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c index 0f557fad4513f..6564285a4a2f7 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c @@ -41,10 +41,10 @@ static int hdmi_runtime_get(struct omap_hdmi *hdmi) DSSDBG("hdmi_runtime_get\n"); r = pm_runtime_get_sync(&hdmi->pdev->dev); - WARN_ON(r < 0); - if (r < 0) + if (WARN_ON(r < 0)) { + pm_runtime_put_noidle(&hdmi->pdev->dev); return r; - + } return 0; } diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c index d9463b3325543..0d7267e25681e 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c @@ -42,10 +42,10 @@ static int hdmi_runtime_get(struct omap_hdmi *hdmi) DSSDBG("hdmi_runtime_get\n"); r = pm_runtime_get_sync(&hdmi->pdev->dev); - WARN_ON(r < 0); - if (r < 0) + if (WARN_ON(r < 0)) { + pm_runtime_put_noidle(&hdmi->pdev->dev); return r; - + } return 0; } diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c index 596a297d58139..301c7c4b2ed2e 100644 --- a/drivers/gpu/drm/omapdrm/dss/venc.c +++ b/drivers/gpu/drm/omapdrm/dss/venc.c @@ -403,8 +403,11 @@ static int venc_runtime_get(struct venc_device *venc) DSSDBG("venc_runtime_get\n"); r = pm_runtime_get_sync(&venc->pdev->dev); - WARN_ON(r < 0); - return r < 0 ? r : 0; + if (WARN_ON(r < 0)) { + pm_runtime_put_noidle(&venc->pdev->dev); + return r; + } + return 0; } static void venc_runtime_put(struct venc_device *venc) -- 2.27.0