All of lore.kernel.org
 help / color / mirror / Atom feed
From: Frank Li <Frank.li@oss.nxp.com>
To: "Peng Fan (OSS)" <peng.fan@oss.nxp.com>
Cc: Linus Walleij <linusw@kernel.org>,
	Bartosz Golaszewski <brgl@kernel.org>,
	Frank Li <Frank.Li@nxp.com>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Pengutronix Kernel Team <kernel@pengutronix.de>,
	Fabio Estevam <festevam@gmail.com>,
	linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,
	imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
	Peng Fan <peng.fan@nxp.com>
Subject: Re: [PATCH v7 07/12] gpio: mxc: use __free guard for runtime PM cleanup
Date: Tue, 27 Oct 2026 09:12:23 -0500	[thread overview]
Message-ID: <auCxR4rrJxdIqlx-@SMW015318> (raw)
In-Reply-To: <20261027-gpio-mxc-cleanup-v7-4-v7-7-7b602d70c149@nxp.com>

On Tue, Oct 27, 2026 at 08:09:34PM +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Use a scope-based cleanup guard to disable runtime PM and drop the
> probe-scoped pm_runtime_get_noresume() reference on error paths.  Disarm
> it with retain_and_null_ptr() before the success-path
> pm_runtime_put_autosuspend().
>
> The guard keeps the required order: pm_runtime_disable() runs before
> pm_runtime_put_noidle(), so dropping the reference cannot trigger a
> runtime suspend callback while probe is still unwinding.
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---

Reviewed-by: Frank Li <Frank.Li@nxp.com>

>  drivers/gpio/gpio-mxc.c | 21 +++++++++++++++++++--
>  1 file changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c
> index 21c74b244c1f..68857730b5e3 100644
> --- a/drivers/gpio/gpio-mxc.c
> +++ b/drivers/gpio/gpio-mxc.c
> @@ -28,6 +28,20 @@
>  #include <linux/of.h>
>  #include <linux/bug.h>
>
> +static void mxc_gpio_pm_release(struct device *dev)
> +{
> +	if (!dev)
> +		return;
> +
> +	if (pm_runtime_enabled(dev))
> +		pm_runtime_disable(dev);
> +
> +	pm_runtime_put_noidle(dev);
> +}
> +
> +DEFINE_FREE(mxc_gpio_pm_cleanup, struct device *,
> +	    mxc_gpio_pm_release(_T))
> +
>  #define IMX_SCU_WAKEUP_OFF		0
>  #define IMX_SCU_WAKEUP_LOW_LVL		4
>  #define IMX_SCU_WAKEUP_FALL_EDGE	5
> @@ -487,6 +501,9 @@ static int mxc_gpio_probe(struct platform_device *pdev)
>  		return PTR_ERR(port->clk);
>
>  	pm_runtime_get_noresume(dev);
> +
> +	struct device *pm_guard __free(mxc_gpio_pm_cleanup) = dev;
> +
>  	pm_runtime_set_active(dev);
>  	pm_runtime_enable(dev);
>
> @@ -562,6 +579,8 @@ static int mxc_gpio_probe(struct platform_device *pdev)
>  	mxc_update_irq_chained_handler(port, true);
>
>  	platform_set_drvdata(pdev, port);
> +
> +	retain_and_null_ptr(pm_guard);
>  	pm_runtime_put_autosuspend(dev);
>
>  	return 0;
> @@ -569,8 +588,6 @@ static int mxc_gpio_probe(struct platform_device *pdev)
>  out_irqdomain_remove:
>  	irq_domain_remove(port->domain);
>  out_bgio:
> -	pm_runtime_disable(dev);
> -	pm_runtime_put_noidle(dev);
>  	dev_info(dev, "%s failed with errno %d\n", __func__, err);
>  	return err;
>  }
>
> --
> 2.51.0
>
>


  reply	other threads:[~2026-10-27 14:13 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-27 12:09 [PATCH v7 00/12] gpio: mxc: probe cleanup Peng Fan (OSS)
2026-10-27 12:09 ` [PATCH v7 01/12] gpio: mxc: use irq_set_irq_wake() to simplify code Peng Fan (OSS)
2026-10-27 14:09   ` Frank Li
2026-10-27 12:09 ` [PATCH v7 02/12] gpio: mxc: use for_each_set_bit() to iterate wakeup pads Peng Fan (OSS)
2026-10-27 16:35   ` Andy Shevchenko
2026-10-28 22:52   ` Linus Walleij
2026-10-27 12:09 ` [PATCH v7 03/12] gpio: mxc: use 'unsigned int' instead of bare 'unsigned' Peng Fan (OSS)
2026-10-27 14:10   ` Frank Li
2026-10-27 16:36   ` Andy Shevchenko
2026-10-29 10:22   ` Linus Walleij
2026-10-27 12:09 ` [PATCH v7 04/12] gpio: mxc: replace of_device_is_compatible() with hwdata flags Peng Fan (OSS)
2026-10-27 12:09 ` [PATCH v7 05/12] gpio: mxc: convert pad wakeup compatible checks to " Peng Fan (OSS)
2026-10-27 12:09 ` [PATCH v7 06/12] gpio: mxc: use local dev variable Peng Fan (OSS)
2026-10-27 12:09 ` [PATCH v7 07/12] gpio: mxc: use __free guard for runtime PM cleanup Peng Fan (OSS)
2026-10-27 14:12   ` Frank Li [this message]
2026-10-27 12:09 ` [PATCH v7 08/12] gpio: mxc: use devres functions to simplify probe code Peng Fan (OSS)
2026-10-27 12:09 ` [PATCH v7 09/12] gpio: mxc: add dev_err_probe() for error paths to help diagnostics Peng Fan (OSS)
2026-10-27 14:13   ` Frank Li
2026-10-27 12:09 ` [PATCH v7 10/12] gpio: mxc: introduce MXC_ICR macros and use field_prep/field_get Peng Fan (OSS)
2026-10-27 12:09 ` [PATCH v7 11/12] gpio: mxc: use BIT() macro for single-bit operations Peng Fan (OSS)
2026-10-27 12:09 ` [PATCH v7 12/12] MAINTAINERS: Add an entry for gpio-mxc Peng Fan (OSS)
2026-10-27 14:14   ` Frank Li

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=auCxR4rrJxdIqlx-@SMW015318 \
    --to=frank.li@oss.nxp.com \
    --cc=Frank.Li@nxp.com \
    --cc=brgl@kernel.org \
    --cc=festevam@gmail.com \
    --cc=imx@lists.linux.dev \
    --cc=kernel@pengutronix.de \
    --cc=linusw@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peng.fan@nxp.com \
    --cc=peng.fan@oss.nxp.com \
    --cc=s.hauer@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.