> STOP command does not guarantee to wait while busy, but subsequent > command MMC_CMDQ_TASK_MGMT to discard the queue will fail if the > card is busy, so be sure to wait by employing mmc_poll_for_busy(). Doesn't the Task Discard Sequence expects you to check CQDPT[i]==1 before sending MMC_CMDQ_TASK_MGMT to discard task id i? Thanks, Avri > > Fixes: 72a5af554df8 ("mmc: core: Add support for handling CQE requests") > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> > --- > drivers/mmc/core/core.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index > 3d3e0ca52614..befde2bd26d3 100644 > --- a/drivers/mmc/core/core.c > +++ b/drivers/mmc/core/core.c > @@ -553,6 +553,8 @@ int mmc_cqe_recovery(struct mmc_host *host) > cmd.busy_timeout = MMC_CQE_RECOVERY_TIMEOUT; > mmc_wait_for_cmd(host, &cmd, 0); > > + mmc_poll_for_busy(host->card, MMC_CQE_RECOVERY_TIMEOUT, > true, > + MMC_BUSY_IO); > + > memset(&cmd, 0, sizeof(cmd)); > cmd.opcode = MMC_CMDQ_TASK_MGMT; > cmd.arg = 1; /* Discard entire queue */ > -- > 2.34.1