diff mbox series

dmaengine: ptdma: Fix the error handling path in pt_core_init()

Message ID 1b2573cf3cd077494531993239f80c08e7feb39e.1643551909.git.christophe.jaillet@wanadoo.fr (mailing list archive)
State Superseded
Headers show
Series dmaengine: ptdma: Fix the error handling path in pt_core_init() | expand

Commit Message

Christophe JAILLET Jan. 30, 2022, 2:12 p.m. UTC
In order to free resources correctly in the error handling path of
pt_core_init(), 2 goto's have to be switched. Otherwise, some resources
will leak and we will try to release things that have not been allocated
yet.

Fixes: fa5d823b16a9 ("dmaengine: ptdma: Initial driver for the AMD PTDMA")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
 drivers/dma/ptdma/ptdma-dev.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Sanjay R Mehta Jan. 31, 2022, 3:06 p.m. UTC | #1
On 1/30/2022 7:42 PM, Christophe JAILLET wrote:
> In order to free resources correctly in the error handling path of
> pt_core_init(), 2 goto's have to be switched. Otherwise, some resources
> will leak and we will try to release things that have not been allocated
> yet.
> 
> Fixes: fa5d823b16a9 ("dmaengine: ptdma: Initial driver for the AMD PTDMA")
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

Acked-by: Sanjay R Mehta <sanju.mehta@amd.com>
> ---
>  drivers/dma/ptdma/ptdma-dev.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/dma/ptdma/ptdma-dev.c b/drivers/dma/ptdma/ptdma-dev.c
> index 8a6bf291a73f..3fa2a6ed4b68 100644
> --- a/drivers/dma/ptdma/ptdma-dev.c
> +++ b/drivers/dma/ptdma/ptdma-dev.c
> @@ -207,7 +207,7 @@ int pt_core_init(struct pt_device *pt)
>  	if (!cmd_q->qbase) {
>  		dev_err(dev, "unable to allocate command queue\n");
>  		ret = -ENOMEM;
> -		goto e_dma_alloc;
> +		goto e_pool;
>  	}
>  
>  	cmd_q->qidx = 0;
> @@ -230,7 +230,7 @@ int pt_core_init(struct pt_device *pt)
>  	/* Request an irq */
>  	ret = request_irq(pt->pt_irq, pt_core_irq_handler, 0, dev_name(pt->dev), pt);
>  	if (ret)
> -		goto e_pool;
> +		goto e_dma_alloc;
>  
>  	/* Update the device registers with queue information. */
>  	cmd_q->qcontrol &= ~CMD_Q_SIZE;
>
Dan Carpenter Feb. 2, 2022, 7:15 a.m. UTC | #2
On Sun, Jan 30, 2022 at 03:12:09PM +0100, Christophe JAILLET wrote:
> @@ -230,7 +230,7 @@ int pt_core_init(struct pt_device *pt)
>  	/* Request an irq */
>  	ret = request_irq(pt->pt_irq, pt_core_irq_handler, 0, dev_name(pt->dev), pt);
>  	if (ret)
> -		goto e_pool;
> +		goto e_dma_alloc;

These are ComeFrom label names.  It's an unfortunate style of naming
labels based on the goto location instead of saying what the goto does.

This is one of those cases where the code has moved on, and now the name
no longer points to where it came from or to where it's going.  It just
stands as a Hyperart Thomasson pointing to the past.  It reminds us of
change and decay.  Take time to smell the air in autumn.  Beauty is all
around.

regards,
dan carpenter
Christophe JAILLET Feb. 2, 2022, 6:45 p.m. UTC | #3
Le 02/02/2022 à 08:15, Dan Carpenter a écrit :
> On Sun, Jan 30, 2022 at 03:12:09PM +0100, Christophe JAILLET wrote:
>> @@ -230,7 +230,7 @@ int pt_core_init(struct pt_device *pt)
>>   	/* Request an irq */
>>   	ret = request_irq(pt->pt_irq, pt_core_irq_handler, 0, dev_name(pt->dev), pt);
>>   	if (ret)
>> -		goto e_pool;
>> +		goto e_dma_alloc;
> 
> These are ComeFrom label names.  It's an unfortunate style of naming
> labels based on the goto location instead of saying what the goto does.
> 
> This is one of those cases where the code has moved on, and now the name
> no longer points to where it came from or to where it's going.  It just
> stands as a Hyperart Thomasson pointing to the past.  It reminds us of
> change and decay.  Take time to smell the air in autumn.  Beauty is all
> around.
> 
> regards,
> dan carpenter
> 

Autumn is over. Winter is coming (tm). And Spring will soon be there.

I'll try to send a refreshing update as a V2 to go one step further and 
do some spring cleaning in the labels used here.

CJ
diff mbox series

Patch

diff --git a/drivers/dma/ptdma/ptdma-dev.c b/drivers/dma/ptdma/ptdma-dev.c
index 8a6bf291a73f..3fa2a6ed4b68 100644
--- a/drivers/dma/ptdma/ptdma-dev.c
+++ b/drivers/dma/ptdma/ptdma-dev.c
@@ -207,7 +207,7 @@  int pt_core_init(struct pt_device *pt)
 	if (!cmd_q->qbase) {
 		dev_err(dev, "unable to allocate command queue\n");
 		ret = -ENOMEM;
-		goto e_dma_alloc;
+		goto e_pool;
 	}
 
 	cmd_q->qidx = 0;
@@ -230,7 +230,7 @@  int pt_core_init(struct pt_device *pt)
 	/* Request an irq */
 	ret = request_irq(pt->pt_irq, pt_core_irq_handler, 0, dev_name(pt->dev), pt);
 	if (ret)
-		goto e_pool;
+		goto e_dma_alloc;
 
 	/* Update the device registers with queue information. */
 	cmd_q->qcontrol &= ~CMD_Q_SIZE;