mmc: cqhci: Fix a tiny potential memory leak on error condition
Free up the allocated memory in the case of error return
The value of mmc_host->cqe_enabled stays 'false'. Thus, cqhci_disable
(mmc_cqe_ops->cqe_disable) won't be called to free the memory. Also,
cqhci_disable() seems to be designed to disable and free all resources, not
suitable to handle this corner case.
Fixes: a4080225f5
("mmc: cqhci: support for command queue enabled host")
Signed-off-by: Alamy Liu <alamy.liu@gmail.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: stable@vger.kernel.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
27ec9dc17c
commit
d07e9fadf3
|
@ -217,12 +217,21 @@ static int cqhci_host_alloc_tdl(struct cqhci_host *cq_host)
|
|||
cq_host->desc_size,
|
||||
&cq_host->desc_dma_base,
|
||||
GFP_KERNEL);
|
||||
if (!cq_host->desc_base)
|
||||
return -ENOMEM;
|
||||
|
||||
cq_host->trans_desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc),
|
||||
cq_host->data_size,
|
||||
&cq_host->trans_desc_dma_base,
|
||||
GFP_KERNEL);
|
||||
if (!cq_host->desc_base || !cq_host->trans_desc_base)
|
||||
if (!cq_host->trans_desc_base) {
|
||||
dmam_free_coherent(mmc_dev(cq_host->mmc), cq_host->desc_size,
|
||||
cq_host->desc_base,
|
||||
cq_host->desc_dma_base);
|
||||
cq_host->desc_base = NULL;
|
||||
cq_host->desc_dma_base = 0;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
pr_debug("%s: cqhci: desc-base: 0x%p trans-base: 0x%p\n desc_dma 0x%llx trans_dma: 0x%llx\n",
|
||||
mmc_hostname(cq_host->mmc), cq_host->desc_base, cq_host->trans_desc_base,
|
||||
|
|
Loading…
Reference in New Issue