Re: [PATCH 5.10 474/491] mmc: core: Drop superfluous validations in mmc_hw|sw_reset()

Ulf Hansson
2026-04-14T10:53:34Z

On Mon, 13 Apr 2026 at 23:10, Ben Hutchings <ben@decadent.org.uk> wrote:
>
> On Mon, 2026-04-13 at 18:01 +0200, Greg Kroah-Hartman wrote:
> > 5.10-stable review patch. If anyone has any objections, please let me know.
> >
> > ------------------
> >
> > From: Ulf Hansson <ulf.hansson@linaro.org>
> >
> > [ Upstream commit fefdd3c91e0a7b3cbb3f25925d93a57c45cb0f31 ]
> >
> > The mmc_hw|sw_reset() APIs are designed to be called solely from upper
> > layers, which means drivers that operates on top of the struct mmc_card,
> > like the mmc block device driver and an SDIO functional driver.
> >
> > Additionally, as long as the struct mmc_host has a valid pointer to a
> > struct mmc_card, the corresponding host->bus_ops pointer stays valid and
> > assigned.
> >
> > For these reasons, let's drop the superfluous reference counting and the
> > redundant validations in mmc_hw|sw_reset().
>
> Is this reasoning still correct for older branches such as 5.10?

Yes, I think it should be fine.

>
> And if so, do they also need commit 406e14808ee6 ("mmc: block: Remove
> error check of hw_reset on reset"), which claims to fix this one? I
> don't really follow the explanation in its commit message.

Yes, good point, this commit is needed as well!

Kind regards
Uffe

>
> Ben.
>
> >
> > Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
> > Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
> > Link: https://lore.kernel.org/r/20210212131532.236775-1-ulf.hansson@linaro.org
> > Stable-dep-of: 901084c51a0a ("mmc: core: Avoid bitfield RMW for claim/retune flags")
> > Signed-off-by: Sasha Levin <sashal@kernel.org>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > ---
> > drivers/mmc/core/block.c | 2 +-
> > drivers/mmc/core/core.c | 21 +--------------------
> > 2 files changed, 2 insertions(+), 21 deletions(-)
> >
> > --- a/drivers/mmc/core/block.c
> > +++ b/drivers/mmc/core/block.c
> > @@ -987,7 +987,7 @@ static int mmc_blk_reset(struct mmc_blk_
> > md->reset_done |= type;
> > err = mmc_hw_reset(host);
> > /* Ensure we switch back to the correct partition */
> > - if (err != -EOPNOTSUPP) {
> > + if (err) {
> > struct mmc_blk_data *main_md =
> > dev_get_drvdata(&host->card->dev);
> > int part_err;
> > --- a/drivers/mmc/core/core.c
> > +++ b/drivers/mmc/core/core.c
> > @@ -2096,18 +2096,7 @@ int mmc_hw_reset(struct mmc_host *host)
> > {
> > int ret;
> >
> > - if (!host->card)
> > - return -EINVAL;
> > -
> > - mmc_bus_get(host);
> > - if (!host->bus_ops || host->bus_dead || !host->bus_ops->hw_reset) {
> > - mmc_bus_put(host);
> > - return -EOPNOTSUPP;
> > - }
> > -
> > ret = host->bus_ops->hw_reset(host);
> > - mmc_bus_put(host);
> > -
> > if (ret < 0)
> > pr_warn("%s: tried to HW reset card, got error %d\n",
> > mmc_hostname(host), ret);
> > @@ -2120,18 +2109,10 @@ int mmc_sw_reset(struct mmc_host *host)
> > {
> > int ret;
> >
> > - if (!host->card)
> > - return -EINVAL;
> > -
> > - mmc_bus_get(host);
> > - if (!host->bus_ops || host->bus_dead || !host->bus_ops->sw_reset) {
> > - mmc_bus_put(host);
> > + if (!host->bus_ops->sw_reset)
> > return -EOPNOTSUPP;
> > - }
> >
> > ret = host->bus_ops->sw_reset(host);
> > - mmc_bus_put(host);
> > -
> > if (ret)
> > pr_warn("%s: tried to SW reset card, got error %d\n",
> > mmc_hostname(host), ret);
> >
> >
>
> --
> Ben Hutchings
> When in doubt, use brute force. - Ken Thompson