DMAENGINE: ste_dma40: fix resource leaks in error paths.
Fix some leaks of allocated descriptors in error paths. Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com> Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com> Signed-off-by: Linus Walleij <linus.walleij@stericsson.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
a2c15fa4c1
commit
819504f486
@ -1728,6 +1728,8 @@ struct dma_async_tx_descriptor *stedma40_memcpy_sg(struct dma_chan *chan,
|
|||||||
|
|
||||||
return &d40d->txd;
|
return &d40d->txd;
|
||||||
err:
|
err:
|
||||||
|
if (d40d)
|
||||||
|
d40_desc_free(d40c, d40d);
|
||||||
spin_unlock_irqrestore(&d40c->lock, flags);
|
spin_unlock_irqrestore(&d40c->lock, flags);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -1939,8 +1941,9 @@ static struct dma_async_tx_descriptor *d40_prep_memcpy(struct dma_chan *chan,
|
|||||||
err_fill_lli:
|
err_fill_lli:
|
||||||
dev_err(&d40c->chan.dev->device,
|
dev_err(&d40c->chan.dev->device,
|
||||||
"[%s] Failed filling in PHY LLI\n", __func__);
|
"[%s] Failed filling in PHY LLI\n", __func__);
|
||||||
d40_pool_lli_free(d40d);
|
|
||||||
err:
|
err:
|
||||||
|
if (d40d)
|
||||||
|
d40_desc_free(d40c, d40d);
|
||||||
spin_unlock_irqrestore(&d40c->lock, flags);
|
spin_unlock_irqrestore(&d40c->lock, flags);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -2079,10 +2082,9 @@ static struct dma_async_tx_descriptor *d40_prep_slave_sg(struct dma_chan *chan,
|
|||||||
|
|
||||||
spin_lock_irqsave(&d40c->lock, flags);
|
spin_lock_irqsave(&d40c->lock, flags);
|
||||||
d40d = d40_desc_get(d40c);
|
d40d = d40_desc_get(d40c);
|
||||||
spin_unlock_irqrestore(&d40c->lock, flags);
|
|
||||||
|
|
||||||
if (d40d == NULL)
|
if (d40d == NULL)
|
||||||
return NULL;
|
goto err;
|
||||||
|
|
||||||
if (d40c->log_num != D40_PHY_CHAN)
|
if (d40c->log_num != D40_PHY_CHAN)
|
||||||
err = d40_prep_slave_sg_log(d40d, d40c, sgl, sg_len,
|
err = d40_prep_slave_sg_log(d40d, d40c, sgl, sg_len,
|
||||||
@ -2095,7 +2097,7 @@ static struct dma_async_tx_descriptor *d40_prep_slave_sg(struct dma_chan *chan,
|
|||||||
"[%s] Failed to prepare %s slave sg job: %d\n",
|
"[%s] Failed to prepare %s slave sg job: %d\n",
|
||||||
__func__,
|
__func__,
|
||||||
d40c->log_num != D40_PHY_CHAN ? "log" : "phy", err);
|
d40c->log_num != D40_PHY_CHAN ? "log" : "phy", err);
|
||||||
return NULL;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
d40d->txd.flags = dma_flags;
|
d40d->txd.flags = dma_flags;
|
||||||
@ -2104,7 +2106,14 @@ static struct dma_async_tx_descriptor *d40_prep_slave_sg(struct dma_chan *chan,
|
|||||||
|
|
||||||
d40d->txd.tx_submit = d40_tx_submit;
|
d40d->txd.tx_submit = d40_tx_submit;
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&d40c->lock, flags);
|
||||||
return &d40d->txd;
|
return &d40d->txd;
|
||||||
|
|
||||||
|
err:
|
||||||
|
if (d40d)
|
||||||
|
d40_desc_free(d40c, d40d);
|
||||||
|
spin_unlock_irqrestore(&d40c->lock, flags);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum dma_status d40_tx_status(struct dma_chan *chan,
|
static enum dma_status d40_tx_status(struct dma_chan *chan,
|
||||||
|
Loading…
Reference in New Issue
Block a user