mmc: cmdq_hci: Remove runtime PM vote if request issuing fails

Remove the runtime PM vote if command-queue request processing fails.
Otherwise, in case command-queue request preparation fails,
the runtime PM votes go out of sync and sdhc platform device suspend
might get blocked.

Change-Id: Ibe95e1653f7558a7994b606922a1625b429d57f6
Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
This commit is contained in:
Veerabhadrarao Badiganti 2017-10-09 19:51:46 +05:30
parent af5f70355c
commit 17f54d16a1

View file

@ -805,7 +805,7 @@ static int cmdq_request(struct mmc_host *mmc, struct mmc_request *mrq)
if (err) { if (err) {
pr_err("%s: failed to configure crypto: err %d tag %d\n", pr_err("%s: failed to configure crypto: err %d tag %d\n",
mmc_hostname(mmc), err, tag); mmc_hostname(mmc), err, tag);
goto out; goto ice_err;
} }
} }
@ -823,7 +823,7 @@ static int cmdq_request(struct mmc_host *mmc, struct mmc_request *mrq)
if (err) { if (err) {
pr_err("%s: %s: failed to setup tx desc: %d\n", pr_err("%s: %s: failed to setup tx desc: %d\n",
mmc_hostname(mmc), __func__, err); mmc_hostname(mmc), __func__, err);
goto out; goto desc_err;
} }
cq_host->mrq_slot[tag] = mrq; cq_host->mrq_slot[tag] = mrq;
@ -843,6 +843,22 @@ ring_doorbell:
/* Commit the doorbell write immediately */ /* Commit the doorbell write immediately */
wmb(); wmb();
return err;
desc_err:
if (cq_host->ops->crypto_cfg_end) {
err = cq_host->ops->crypto_cfg_end(mmc, mrq);
if (err) {
pr_err("%s: failed to end ice config: err %d tag %d\n",
mmc_hostname(mmc), err, tag);
}
}
if (!(cq_host->caps & CMDQ_CAP_CRYPTO_SUPPORT) &&
cq_host->ops->crypto_cfg_reset)
cq_host->ops->crypto_cfg_reset(mmc, tag);
ice_err:
if (err)
cmdq_runtime_pm_put(cq_host);
out: out:
return err; return err;
} }