Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a574919 authored by Ulf Hansson's avatar Ulf Hansson
Browse files

mmc: core: Avoid hanging to claim host for mmc via some nested calls



As the block layer, since the conversion to blkmq, claims the host using a
context, a following nested call to mmc_claim_host(), which isn't using a
context, may hang.

Calling mmc_interrupt_hpi() and mmc_read_bkops_status() via the mmc block
layer, may suffer from this problem, as these functions are calling
mmc_claim|release_host().

Let's fix the problem by removing the calls to mmc_claim|release_host()
from the above mentioned functions and instead make the callers responsible
of claiming/releasing the host. As a matter of fact, the existing callers
already deals with it.

Fixes: 81196976 ("mmc: block: Add blk-mq support")
Reported-by: default avatarDmitry Osipenko <digetx@gmail.com>
Suggested-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Tested-by: default avatarDmitry Osipenko <digetx@gmail.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Reviewed-by: default avatarShawn Lin <shawn.lin@rock-chips.com>
parent 5b43df8b
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -848,7 +848,6 @@ int mmc_interrupt_hpi(struct mmc_card *card)
		return 1;
	}

	mmc_claim_host(card->host);
	err = mmc_send_status(card, &status);
	if (err) {
		pr_err("%s: Get card status fail\n", mmc_hostname(card->host));
@@ -890,7 +889,6 @@ int mmc_interrupt_hpi(struct mmc_card *card)
	} while (!err);

out:
	mmc_release_host(card->host);
	return err;
}

@@ -932,9 +930,7 @@ static int mmc_read_bkops_status(struct mmc_card *card)
	int err;
	u8 *ext_csd;

	mmc_claim_host(card->host);
	err = mmc_get_ext_csd(card, &ext_csd);
	mmc_release_host(card->host);
	if (err)
		return err;