mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-28 04:24:34 +08:00
crypto: ccp - Clean up and exit correctly on allocation failure
Return and fail driver initialization if a DMA pool or coherent memory
can't be allocated. Be sure to clean up allocated memory.
Fixes: 4b394a232d
("crypto: ccp - Let a v5 CCP provide the same function as v3")
Signed-off-by: Gary R Hook <gary.hook@amd.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
514838e920
commit
114e2ccd9e
@ -803,6 +803,7 @@ static int ccp5_init(struct ccp_device *ccp)
|
||||
if (!dma_pool) {
|
||||
dev_err(dev, "unable to allocate dma pool\n");
|
||||
ret = -ENOMEM;
|
||||
goto e_pool;
|
||||
}
|
||||
|
||||
cmd_q = &ccp->cmd_q[ccp->cmd_q_count];
|
||||
@ -816,9 +817,9 @@ static int ccp5_init(struct ccp_device *ccp)
|
||||
/* Page alignment satisfies our needs for N <= 128 */
|
||||
BUILD_BUG_ON(COMMANDS_PER_QUEUE > 128);
|
||||
cmd_q->qsize = Q_SIZE(Q_DESC_SIZE);
|
||||
cmd_q->qbase = dma_alloc_coherent(dev, cmd_q->qsize,
|
||||
&cmd_q->qbase_dma,
|
||||
GFP_KERNEL);
|
||||
cmd_q->qbase = dmam_alloc_coherent(dev, cmd_q->qsize,
|
||||
&cmd_q->qbase_dma,
|
||||
GFP_KERNEL);
|
||||
if (!cmd_q->qbase) {
|
||||
dev_err(dev, "unable to allocate command queue\n");
|
||||
ret = -ENOMEM;
|
||||
@ -994,7 +995,6 @@ e_pool:
|
||||
|
||||
static void ccp5_destroy(struct ccp_device *ccp)
|
||||
{
|
||||
struct device *dev = ccp->dev;
|
||||
struct ccp_cmd_queue *cmd_q;
|
||||
struct ccp_cmd *cmd;
|
||||
unsigned int i;
|
||||
@ -1037,12 +1037,6 @@ static void ccp5_destroy(struct ccp_device *ccp)
|
||||
|
||||
sp_free_ccp_irq(ccp->sp, ccp);
|
||||
|
||||
for (i = 0; i < ccp->cmd_q_count; i++) {
|
||||
cmd_q = &ccp->cmd_q[i];
|
||||
dma_free_coherent(dev, cmd_q->qsize, cmd_q->qbase,
|
||||
cmd_q->qbase_dma);
|
||||
}
|
||||
|
||||
/* Flush the cmd and backlog queue */
|
||||
while (!list_empty(&ccp->cmd)) {
|
||||
/* Invoke the callback directly with an error code */
|
||||
|
Loading…
Reference in New Issue
Block a user