Dan, On 13/11/2020 12.16, Dan Carpenter wrote: > 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, Reviewed-by: Peter Ujfalusi <peter.ujfalusi@xxxxxx> fwiw I did a boot test as well. - Péter > Fixes: d2fb0a043838 ("dmaengine: break out channel registration") > Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > --- > drivers/dma/dmaengine.c | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c > index 7974fa0400d8..962cbb5e5f7f 100644 > --- a/drivers/dma/dmaengine.c > +++ b/drivers/dma/dmaengine.c > @@ -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; > } > > Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki