diff options
author | Veerabhadrarao Badiganti <vbadigan@codeaurora.org> | 2017-10-09 19:51:46 +0530 |
---|---|---|
committer | Veerabhadrarao Badiganti <vbadigan@codeaurora.org> | 2017-11-24 19:03:47 +0530 |
commit | 17f54d16a19afd13ca577aae04cbeeb40025143c (patch) | |
tree | d6e82651a2d1215f1a0f24a746326a27a964793e /drivers/mmc/host | |
parent | af5f70355c26dced06be3b8b34f0f10b81a44f40 (diff) |
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>
Diffstat (limited to 'drivers/mmc/host')
-rw-r--r-- | drivers/mmc/host/cmdq_hci.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/mmc/host/cmdq_hci.c b/drivers/mmc/host/cmdq_hci.c index 3f741f83a436..83d24fcaf2ab 100644 --- a/drivers/mmc/host/cmdq_hci.c +++ b/drivers/mmc/host/cmdq_hci.c @@ -805,7 +805,7 @@ static int cmdq_request(struct mmc_host *mmc, struct mmc_request *mrq) if (err) { pr_err("%s: failed to configure crypto: err %d tag %d\n", 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) { pr_err("%s: %s: failed to setup tx desc: %d\n", mmc_hostname(mmc), __func__, err); - goto out; + goto desc_err; } cq_host->mrq_slot[tag] = mrq; @@ -843,6 +843,22 @@ ring_doorbell: /* Commit the doorbell write immediately */ 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: return err; } |