Re: [PATCH 1/2] mmc: core: Drop superfluous validations in mmc_hw|sw_reset()

From: Adrian Hunter
Date: Tue Feb 16 2021 - 03:33:52 EST


On 12/02/21 3:15 pm, Ulf Hansson wrote:
> 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().
>
> Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>

Reviewed-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>

> ---
>
> Note, ideally mmc_hw|sw_reset() shall be converted to take a struct mmc_card*
> as an in-parameter, rather than the current struct mmc_host*, but that is left
> to a future/separate change.
>
> ---
> drivers/mmc/core/block.c | 2 +-
> drivers/mmc/core/core.c | 21 +--------------------
> 2 files changed, 2 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
> index b877f62df366..b7d3f5a73388 100644
> --- a/drivers/mmc/core/block.c
> +++ b/drivers/mmc/core/block.c
> @@ -947,7 +947,7 @@ static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host,
> 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;
> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
> index 1136b859ddd8..2e41fa598bd6 100644
> --- a/drivers/mmc/core/core.c
> +++ b/drivers/mmc/core/core.c
> @@ -2080,18 +2080,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);
> @@ -2104,18 +2093,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);
>