Re: [PATCH v6 8/8] mmc: sdhci-esdhc-imx: fix resume error handling
Frank Li <[email protected]> Mon, 13 Jul 2026 09:58:00 -0500
| Newsgroups | org.kernel.vger.linux-mmc,dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <alT8-DUlcLIcXCK1@SMW015318> |
On Mon, Jul 13, 2026 at 12:39:04PM +0800, [email protected] wrote: > From: Luke Wang <[email protected]> > > Check pm_runtime_force_resume() return value in resume. If it fails > (clock enable failure), return immediately since accessing hardware > registers on an unclocked device would cause a kernel panic. > > The early return intentionally skips enable_irq() and > sdhci_disable_irq_wakeups() because the IRQ handler reads > SDHCI_INT_STATUS, which would also fault without clocks. The PM runtime > usage counter leak only affects this already-broken device instance and > is an acceptable tradeoff to preserve system stability. > > Remove the return value check for mmc_gpio_set_cd_wake(host->mmc, false) > since disable_irq_wake() called internally always returns 0. > > Also return 0 explicitly on the success path instead of propagating > stale return values. > > Fixes: 676a83855614 ("mmc: host: sdhci-esdhc-imx: refactor the system PM logic") > Signed-off-by: Luke Wang <[email protected]> > --- Reviewed-by: Frank Li <[email protected]> > drivers/mmc/host/sdhci-esdhc-imx.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c > index 6cb84690fde4..f4bfb14423e4 100644 > --- a/drivers/mmc/host/sdhci-esdhc-imx.c > +++ b/drivers/mmc/host/sdhci-esdhc-imx.c > @@ -2126,12 +2126,12 @@ static int sdhci_esdhc_resume(struct device *dev) > dev_warn(dev, "Failed to restore pinctrl state\n"); > } > > - pm_runtime_force_resume(dev); > - > - ret = mmc_gpio_set_cd_wake(host->mmc, false); > + ret = pm_runtime_force_resume(dev); > if (ret) > return ret; > > + mmc_gpio_set_cd_wake(host->mmc, false); > + > /* re-initialize hw state in case it's lost in low power mode */ > sdhci_esdhc_imx_hwinit(host); > > @@ -2158,7 +2158,7 @@ static int sdhci_esdhc_resume(struct device *dev) > > pm_runtime_put_autosuspend(dev); > > - return ret; > + return 0; > } > > static int sdhci_esdhc_runtime_suspend(struct device *dev) > -- > 2.34.1 > >