From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> Switch to devm_kmalloc for allocating the result_buf. This allows us to drop two labels and make the devm action callback for DMA channels smaller. Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> --- drivers/crypto/qce/dma.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/drivers/crypto/qce/dma.c b/drivers/crypto/qce/dma.c index 1dec7aea852d..6ac2efb7c2f7 100644 --- a/drivers/crypto/qce/dma.c +++ b/drivers/crypto/qce/dma.c @@ -15,7 +15,6 @@ static void qce_dma_release(void *data) dma_release_channel(dma->txchan); dma_release_channel(dma->rxchan); - kfree(dma->result_buf); } int devm_qce_dma_request(struct device *dev, struct qce_dma_data *dma) @@ -28,26 +27,23 @@ int devm_qce_dma_request(struct device *dev, struct qce_dma_data *dma) dma->rxchan = dma_request_chan(dev, "rx"); if (IS_ERR(dma->rxchan)) { - ret = PTR_ERR(dma->rxchan); - goto error_rx; + dma_release_channel(dma->txchan); + return PTR_ERR(dma->rxchan); } - dma->result_buf = kmalloc(QCE_RESULT_BUF_SZ + QCE_IGNORE_BUF_SZ, - GFP_KERNEL); - if (!dma->result_buf) { - ret = -ENOMEM; - goto error_nomem; - } + ret = devm_add_action_or_reset(dev, qce_dma_release, dma); + if (ret) + return ret; + + dma->result_buf = devm_kmalloc(dev, + QCE_RESULT_BUF_SZ + QCE_IGNORE_BUF_SZ, + GFP_KERNEL); + if (!dma->result_buf) + return -ENOMEM; dma->ignore_buf = dma->result_buf + QCE_RESULT_BUF_SZ; - return devm_add_action_or_reset(dev, qce_dma_release, dma); - -error_nomem: - dma_release_channel(dma->rxchan); -error_rx: - dma_release_channel(dma->txchan); - return ret; + return 0; } struct scatterlist * -- 2.45.2