From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751464AbdJVOzM (ORCPT ); Sun, 22 Oct 2017 10:55:12 -0400 Received: from mout.web.de ([217.72.192.78]:61171 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751014AbdJVOzK (ORCPT ); Sun, 22 Oct 2017 10:55:10 -0400 To: dmaengine@vger.kernel.org, Dan Williams , Peter Ujfalusi , Vinod Koul Cc: LKML , kernel-janitors@vger.kernel.org From: SF Markus Elfring Subject: [PATCH] dmaengine: edma: Use common error handling code in three functions Message-ID: Date: Sun, 22 Oct 2017 16:54:59 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:rH3fGSv8juosohqtuEGkB2x0cyt8nVUAx+2pTmsnnUZ26nXPDUf NCaoR7M5n3ZllEfpHGmVPvmfQMSGWAYArffql20O/Haj9qbQv58uVqyDG1MbHTU35wnDKMy 22a0wltQE375m14wlcbrlv2LAWFuE+FppzQzGm9rDmAbyeTbwt2253R3e2x1wxoocjiBD9T RcSyjoHUef1FTAm6skbUw== X-UI-Out-Filterresults: notjunk:1;V01:K0:CMm5VhE3lgg=:AanHlR/f/wR+dMGyPkUP8t 9CTHDKhTGOy87ZcwsBVSBM3/6XUtE5U6X11abD88VzpaXgalf+6ZWGXxSA/VRm1Ljh4ooD9tH TtPfWUOaT8YVuEZ1KGbA3ZIPojh8quX4LxeDA3kcYrcgD2XK8Z4guu4yhhkw0pwIO57H8spp/ AbMd9FfNwtafW+cKE3KeD+/kAC8SfXy7wE5RDmOxXfmjimtw6jWM/rdel9M+9xnHuoVWrhm+O 0HMjJ9XxYhd2bTfS9LrRRtAjTKuBBv+/1WiDPLlLf5pIYNO5hj56e4jLYClorT3Yps7DbMJ59 K2jBIlPSYFBHdI+I2RyK1OS1kBN2W1Xq+xrHVONMeyJPm99awRjOXzg9a3Wm2h8rjyN6AwbEZ HTKO93dV/JudYtoK09z/5BC7OA+GkWCD9/yPd5U2UFHruodUARhRlaSxkmCb80BTN2+8epmNt q2X9OVpTpBxhfG6yGziH2sGJrfgENAEd6ubZ5jOhKGj7oK+N3VOrI9ub/l+U3PAKWlVYMy9/G FpMoRYotFnTO+dricGLJbwc3L5XI+qH1bVNkVxc4KvUwlvqsy1Kqn4VfESUHOm8XGrD6tJdXs RpIyVO/SAC+PtzO8xVgCvJt8Tw6YWx81nwiOH5L+GCHvnR3PndKNUg1XoeJDgY8cvJhgoc/oh BFaygUWEtcsd0c92B2kSQf+ex/agVXWjmsFwoZcDXT8AjbDg9qXX8Zkr8zxLOAgOiop5r+Zco d1eztcnrL6Os0vTNtNWlpcWCpNVAXsMv41dRVcf3farupNksZyIKtmgjeb3RgKHUymV0vWZAr ocIFNYlIwg4totizfMyYRkO6CQMx5MvsoDh+HBy1/yycmM1tMA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Markus Elfring Date: Sun, 22 Oct 2017 16:46:34 +0200 Add a jump target so that a bit of exception handling can be better reused at the end of these functions. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- drivers/dma/edma.c | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c index a7ea20e7b8e9..c973ea97467f 100644 --- a/drivers/dma/edma.c +++ b/drivers/dma/edma.c @@ -1091,10 +1091,9 @@ static struct dma_async_tx_descriptor *edma_prep_slave_sg( echan->slot[i] = edma_alloc_slot(echan->ecc, EDMA_SLOT_ANY); if (echan->slot[i] < 0) { - kfree(edesc); dev_err(dev, "%s: Failed to allocate slot\n", __func__); - return NULL; + goto free_desc; } } } @@ -1110,10 +1109,8 @@ static struct dma_async_tx_descriptor *edma_prep_slave_sg( ret = edma_config_pset(chan, &edesc->pset[i], src_addr, dst_addr, burst, dev_width, sg_dma_len(sg), direction); - if (ret < 0) { - kfree(edesc); - return NULL; - } + if (ret < 0) + goto free_desc; edesc->absync = ret; edesc->residue += sg_dma_len(sg); @@ -1133,6 +1130,10 @@ static struct dma_async_tx_descriptor *edma_prep_slave_sg( edesc->residue_stat = edesc->residue; return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); + +free_desc: + kfree(edesc); + return NULL; } static struct dma_async_tx_descriptor *edma_prep_dma_memcpy( @@ -1203,10 +1204,8 @@ static struct dma_async_tx_descriptor *edma_prep_dma_memcpy( ret = edma_config_pset(chan, &edesc->pset[0], src, dest, 1, width, pset_len, DMA_MEM_TO_MEM); - if (ret < 0) { - kfree(edesc); - return NULL; - } + if (ret < 0) + goto free_desc; edesc->absync = ret; @@ -1222,10 +1221,9 @@ static struct dma_async_tx_descriptor *edma_prep_dma_memcpy( echan->slot[1] = edma_alloc_slot(echan->ecc, EDMA_SLOT_ANY); if (echan->slot[1] < 0) { - kfree(edesc); dev_err(dev, "%s: Failed to allocate slot\n", __func__); - return NULL; + goto free_desc; } } dest += pset_len; @@ -1234,16 +1232,18 @@ static struct dma_async_tx_descriptor *edma_prep_dma_memcpy( ret = edma_config_pset(chan, &edesc->pset[1], src, dest, 1, width, pset_len, DMA_MEM_TO_MEM); - if (ret < 0) { - kfree(edesc); - return NULL; - } + if (ret < 0) + goto free_desc; edesc->pset[1].param.opt |= ITCCHEN; edesc->pset[1].param.opt |= TCINTEN; } return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); + +free_desc: + kfree(edesc); + return NULL; } static struct dma_async_tx_descriptor *edma_prep_dma_cyclic( @@ -1334,10 +1334,9 @@ static struct dma_async_tx_descriptor *edma_prep_dma_cyclic( echan->slot[i] = edma_alloc_slot(echan->ecc, EDMA_SLOT_ANY); if (echan->slot[i] < 0) { - kfree(edesc); dev_err(dev, "%s: Failed to allocate slot\n", __func__); - return NULL; + goto free_desc; } } @@ -1350,10 +1349,8 @@ static struct dma_async_tx_descriptor *edma_prep_dma_cyclic( ret = edma_config_pset(chan, &edesc->pset[i], src_addr, dst_addr, burst, dev_width, period_len, direction); - if (ret < 0) { - kfree(edesc); - return NULL; - } + if (ret < 0) + goto free_desc; if (direction == DMA_DEV_TO_MEM) dst_addr += period_len; @@ -1402,6 +1399,10 @@ static struct dma_async_tx_descriptor *edma_prep_dma_cyclic( edma_assign_channel_eventq(echan, EVENTQ_0); return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); + +free_desc: + kfree(edesc); + return NULL; } static void edma_completion_handler(struct edma_chan *echan) -- 2.14.2