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

Ben Hutchings
2026-04-13T21:10:59Z

[-- Attachment #1: Type: text/plain, Size: 3180 bytes --]

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?

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.

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

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]