dmaengine: fix error codes in channel_register()
Subsystems (2)
PATCH 1/1 dmaengine: fix error codes in channel_register()
The error codes were not set on some of these error paths.
Also the error handling was more confusing than it needed to be so I cleaned it up and shuffled it around a bit.
--- drivers/dma/dmaengine.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
drivers/dma/dmaengine.c +9 -8
@@ -1039,16 +1039,15 @@ static int get_dma_id(struct dma_device *device)static int __dma_async_device_channel_register (struct dma_device *device,struct dma_chan *chan) { -int rc =0 ; +int rc; chan->local =alloc_percpu (typeof (*chan->local));if (!chan->local) - goto err_out; +return -ENOMEM ; chan->dev =kzalloc (sizeof (*chan->dev),GFP_KERNEL );if (!chan->dev) { -free_percpu (chan->local); - chan->local =NULL ; - goto err_out; + rc = -ENOMEM ; + goto err_free_local; }/*
@@ -1061,7 +1060,8 @@ static int __dma_async_device_channel_register(struct dma_device *device,if (chan->chan_id <0 ) {pr_err ("%s: unable to alloc ida for chan: %d\n" , __func__, chan->chan_id); - goto err_out; + rc = chan->chan_id; + goto err_free_dev; } chan->dev->device.class = &dma_devclass;
@@ -1082,9 +1082,10 @@ static int __dma_async_device_channel_register(struct dma_device *device,mutex_lock (&device->chan_mutex);ida_free (&device->chan_ida, chan->chan_id);mutex_unlock (&device->chan_mutex); - err_out: -free_percpu (chan->local); + err_free_dev:kfree (chan->dev); + err_free_local: +free_percpu (chan->local);return rc; }
Signature · 1 line
2.28.0
Dan,
Quoted 4 lines · Dan Carpenter
The error codes were not set on some of these error paths.
Also the error handling was more confusing than it needed to be so I cleaned it up and shuffled it around a bit.
Nice catch,
fwiw I did a boot test as well.
- Péter
Quoted 45 lines
Fixes d2fb0a043838 ("dmaengine: break out channel registration")Signed-off-by Dan Carpenter <[email protected]>--- drivers/dma/dmaengine.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)drivers/dma/dmaengine.c +6
-6@@ -1039,16 +1039,15 @@ static int get_dma_id(struct dma_device *device)static int __dma_async_device_channel_register (struct dma_device *device,struct dma_chan *chan) { -int rc =0 ; +int rc; chan->local =alloc_percpu (typeof (*chan->local));if (!chan->local) - goto err_out; +return -ENOMEM ; chan->dev =kzalloc (sizeof (*chan->dev),GFP_KERNEL );if (!chan->dev) { -free_percpu (chan->local); - chan->local =NULL ; - goto err_out; + rc = -ENOMEM ; + goto err_free_local; }/* @@ -1061,7 +1060,8 @@ static int __dma_async_device_channel_register(struct dma_device *device,if (chan->chan_id <0 ) {pr_err ("%s: unable to alloc ida for chan: %d\n" , __func__, chan->chan_id); - goto err_out; + rc = chan->chan_id; + goto err_free_dev; } chan->dev->device.class = &dma_devclass;@@ -1082,9 +1082,10 @@ static int __dma_async_device_channel_register(struct dma_device *device,mutex_lock (&device->chan_mutex);ida_free (&device->chan_ida, chan->chan_id);
drivers/dma/dmaengine.c static int __dma_async_device_channel_register(struct dma_device *device, · line 1091
Quoted 10 lines
drivers/dma/dmaengine.c +3
-2mutex_unlock (&device->chan_mutex); - err_out: -free_percpu (chan->local); + err_free_dev:kfree (chan->dev); + err_free_local: +free_percpu (chan->local);return rc; }
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
Quoted 4 lines · Dan Carpenter
The error codes were not set on some of these error paths.
Also the error handling was more confusing than it needed to be so I cleaned it up and shuffled it around a bit.
Applied, thanks
Signature · 1 line
~Vinod