From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 33D5C1DA62E for ; Tue, 23 Dec 2025 15:58:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766505494; cv=none; b=H45qqpQl4j8aEmXwHb5UZGp1jIPw4ekjaJYK4fuxlnLq9rwZXm3Zqi2bPfNlZvFDc+oHvybJFOInR+NWaa3QLFTjyR4Ikw6v3SH/T+bYCJCSBarbIX8drUO/8hnPb3g03qbckCel/emOEdpYtLHJt/B9V/l+6PXBMH78SohVGfs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766505494; c=relaxed/simple; bh=vKrMLCPSbh8gD+JQJgLtluOE/5j4TJNl/B3XS7owfW4=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=OeMkfumivTIplMolFyDDBCzjmqIZZpthpZTPchKGGbqWlSPSM22vHtmIejYcuMMQG0nE8cK/Yfqyh7A3euEIvP8VXXOdut5i14gZ7Zfa6Legz6MlLudRhHpNRCuNcp78Pv0xeWJLHvCrqSjXIfKf0rrSPaKU+uiWKXR9kb/YVl4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 80E0A497 for ; Tue, 23 Dec 2025 07:58:03 -0800 (PST) Received: from e142607.local (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 495233F73F for ; Tue, 23 Dec 2025 07:58:10 -0800 (PST) Date: Tue, 23 Dec 2025 15:57:20 +0000 From: Liviu Dudau To: "Rafael J. Wysocki" Cc: Linux PM , LKML , Ulf Hansson , Brian Norris , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Liu Ying , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Shawn Guo , Sascha Hauer , Fabio Estevam , Dave Stevenson , =?utf-8?B?TWHDrXJh?= Canal , Raspberry Pi Kernel Maintenance , dri-devel@lists.freedesktop.org Subject: Re: [PATCH v1 03/23] drm: Discard pm_runtime_put() return value Message-ID: References: <6245770.lOV4Wx5bFT@rafael.j.wysocki> <3045480.e9J7NaK4W3@rafael.j.wysocki> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <3045480.e9J7NaK4W3@rafael.j.wysocki> On Mon, Dec 22, 2025 at 08:57:35PM +0100, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki > > Multiple DRM drivers use the pm_runtime_put() return value for printing > debug or even error messages and all of those messages are at least > somewhat misleading. > > Returning an error code from pm_runtime_put() merely means that it has > not queued up a work item to check whether or not the device can be > suspended and there are many perfectly valid situations in which that > can happen, like after writing "on" to the devices' runtime PM "control" > attribute in sysfs for one example. It also happens when the kernel > has been configured with CONFIG_PM unset. > > For this reason, modify all of those drivers to simply discard the > pm_runtime_put() return value which is what they should be doing. > > This will facilitate a planned change of the pm_runtime_put() return > type to void in the future. > > Signed-off-by: Rafael J. Wysocki > --- > > This patch is part of a series, but it doesn't depend on anything else > in that series. The last patch in the series depends on it. > > It can be applied by itself and if you decide to do so, please let me > know. > > Otherwise, an ACK or equivalent will be appreciated, but also the lack > of specific criticism will be eventually regarded as consent. > > --- > drivers/gpu/drm/arm/malidp_crtc.c | 6 +----- For the malidp_crtc.c: Acked-by: Liviu Dudau Best regards, Liviu > drivers/gpu/drm/bridge/imx/imx8qm-ldb.c | 4 +--- > drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c | 4 +--- > drivers/gpu/drm/bridge/imx/imx8qxp-pixel-combiner.c | 5 +---- > drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c | 5 +---- > drivers/gpu/drm/imx/dc/dc-crtc.c | 12 +++--------- > drivers/gpu/drm/vc4/vc4_hdmi.c | 5 +---- > drivers/gpu/drm/vc4/vc4_vec.c | 12 ++---------- > 8 files changed, 11 insertions(+), 42 deletions(-) > > --- a/drivers/gpu/drm/arm/malidp_crtc.c > +++ b/drivers/gpu/drm/arm/malidp_crtc.c > @@ -77,7 +77,6 @@ static void malidp_crtc_atomic_disable(s > crtc); > struct malidp_drm *malidp = crtc_to_malidp_device(crtc); > struct malidp_hw_device *hwdev = malidp->dev; > - int err; > > /* always disable planes on the CRTC that is being turned off */ > drm_atomic_helper_disable_planes_on_crtc(old_state, false); > @@ -87,10 +86,7 @@ static void malidp_crtc_atomic_disable(s > > clk_disable_unprepare(hwdev->pxlclk); > > - err = pm_runtime_put(crtc->dev->dev); > - if (err < 0) { > - DRM_DEBUG_DRIVER("Failed to disable runtime power management: %d\n", err); > - } > + pm_runtime_put(crtc->dev->dev); > } > > static const struct gamma_curve_segment { > --- a/drivers/gpu/drm/bridge/imx/imx8qm-ldb.c > +++ b/drivers/gpu/drm/bridge/imx/imx8qm-ldb.c > @@ -280,9 +280,7 @@ static void imx8qm_ldb_bridge_atomic_dis > clk_disable_unprepare(imx8qm_ldb->clk_bypass); > clk_disable_unprepare(imx8qm_ldb->clk_pixel); > > - ret = pm_runtime_put(dev); > - if (ret < 0) > - DRM_DEV_ERROR(dev, "failed to put runtime PM: %d\n", ret); > + pm_runtime_put(dev); > } > > static const u32 imx8qm_ldb_bus_output_fmts[] = { > --- a/drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c > +++ b/drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c > @@ -282,9 +282,7 @@ static void imx8qxp_ldb_bridge_atomic_di > if (is_split && companion) > companion->funcs->atomic_disable(companion, state); > > - ret = pm_runtime_put(dev); > - if (ret < 0) > - DRM_DEV_ERROR(dev, "failed to put runtime PM: %d\n", ret); > + pm_runtime_put(dev); > } > > static const u32 imx8qxp_ldb_bus_output_fmts[] = { > --- a/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-combiner.c > +++ b/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-combiner.c > @@ -181,11 +181,8 @@ static void imx8qxp_pc_bridge_atomic_dis > { > struct imx8qxp_pc_channel *ch = bridge->driver_private; > struct imx8qxp_pc *pc = ch->pc; > - int ret; > > - ret = pm_runtime_put(pc->dev); > - if (ret < 0) > - DRM_DEV_ERROR(pc->dev, "failed to put runtime PM: %d\n", ret); > + pm_runtime_put(pc->dev); > } > > static const u32 imx8qxp_pc_bus_output_fmts[] = { > --- a/drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c > +++ b/drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c > @@ -127,11 +127,8 @@ static void imx8qxp_pxl2dpi_bridge_atomi > struct drm_atomic_state *state) > { > struct imx8qxp_pxl2dpi *p2d = bridge->driver_private; > - int ret; > > - ret = pm_runtime_put(p2d->dev); > - if (ret < 0) > - DRM_DEV_ERROR(p2d->dev, "failed to put runtime PM: %d\n", ret); > + pm_runtime_put(p2d->dev); > > if (p2d->companion) > p2d->companion->funcs->atomic_disable(p2d->companion, state); > --- a/drivers/gpu/drm/imx/dc/dc-crtc.c > +++ b/drivers/gpu/drm/imx/dc/dc-crtc.c > @@ -300,7 +300,7 @@ dc_crtc_atomic_disable(struct drm_crtc * > drm_atomic_get_new_crtc_state(state, crtc); > struct dc_drm_device *dc_drm = to_dc_drm_device(crtc->dev); > struct dc_crtc *dc_crtc = to_dc_crtc(crtc); > - int idx, ret; > + int idx; > > if (!drm_dev_enter(crtc->dev, &idx)) > goto out; > @@ -313,16 +313,10 @@ dc_crtc_atomic_disable(struct drm_crtc * > dc_fg_disable_clock(dc_crtc->fg); > > /* request pixel engine power-off as plane is off too */ > - ret = pm_runtime_put(dc_drm->pe->dev); > - if (ret) > - dc_crtc_err(crtc, "failed to put DC pixel engine RPM: %d\n", > - ret); > + pm_runtime_put(dc_drm->pe->dev); > > /* request display engine power-off when CRTC is disabled */ > - ret = pm_runtime_put(dc_crtc->de->dev); > - if (ret < 0) > - dc_crtc_err(crtc, "failed to put DC display engine RPM: %d\n", > - ret); > + pm_runtime_put(dc_crtc->de->dev); > > drm_dev_exit(idx); > > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c > @@ -848,7 +848,6 @@ static void vc4_hdmi_encoder_post_crtc_p > struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); > struct drm_device *drm = vc4_hdmi->connector.dev; > unsigned long flags; > - int ret; > int idx; > > mutex_lock(&vc4_hdmi->mutex); > @@ -867,9 +866,7 @@ static void vc4_hdmi_encoder_post_crtc_p > clk_disable_unprepare(vc4_hdmi->pixel_bvb_clock); > clk_disable_unprepare(vc4_hdmi->pixel_clock); > > - ret = pm_runtime_put(&vc4_hdmi->pdev->dev); > - if (ret < 0) > - drm_err(drm, "Failed to release power domain: %d\n", ret); > + pm_runtime_put(&vc4_hdmi->pdev->dev); > > drm_dev_exit(idx); > > --- a/drivers/gpu/drm/vc4/vc4_vec.c > +++ b/drivers/gpu/drm/vc4/vc4_vec.c > @@ -542,7 +542,7 @@ static void vc4_vec_encoder_disable(stru > { > struct drm_device *drm = encoder->dev; > struct vc4_vec *vec = encoder_to_vc4_vec(encoder); > - int idx, ret; > + int idx; > > if (!drm_dev_enter(drm, &idx)) > return; > @@ -556,17 +556,9 @@ static void vc4_vec_encoder_disable(stru > > clk_disable_unprepare(vec->clock); > > - ret = pm_runtime_put(&vec->pdev->dev); > - if (ret < 0) { > - drm_err(drm, "Failed to release power domain: %d\n", ret); > - goto err_dev_exit; > - } > + pm_runtime_put(&vec->pdev->dev); > > drm_dev_exit(idx); > - return; > - > -err_dev_exit: > - drm_dev_exit(idx); > } > > static void vc4_vec_encoder_enable(struct drm_encoder *encoder, > > >