From ed2a9e9ae2aac674b9e4beb9693a9ca6387ebaf7 Mon Sep 17 00:00:00 2001 From: Jonas Aaberg Date: Fri, 16 Apr 2010 15:02:00 +0200 Subject: [PATCH 21/65] DMAENGINE: ste_dma40: improve allocation error handling Better error handling when channel allocation fails. Signed-off-by: Jonas Aaberg Signed-off-by: Linus Walleij --- drivers/dma/ste_dma40.c | 24 ++++++++++-------------- 1 files changed, 10 insertions(+), 14 deletions(-) diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c index b60a6db..8ed1547 100644 --- a/drivers/dma/ste_dma40.c +++ b/drivers/dma/ste_dma40.c @@ -1239,7 +1239,7 @@ static int d40_free_dma(struct d40_chan *d40c) res = d40_channel_execute_command(d40c, D40_DMA_SUSPEND_REQ); if (res) { - dev_err(&d40c->chan.dev->device, "[%s] suspend\n", + dev_err(&d40c->chan.dev->device, "[%s] suspend failed\n", __func__); return res; } @@ -1657,8 +1657,12 @@ static int d40_alloc_chan_resources(struct dma_chan *chan) */ if (d40c->dma_cfg.channel_type == 0) { err = d40_config_memcpy(d40c); - if (err) - goto err_alloc; + if (err) { + dev_err(&d40c->chan.dev->device, + "[%s] Failed to configure memcpy channel\n", + __func__); + goto fail; + } } is_free_phy = (d40c->phy_chan == NULL); @@ -1666,7 +1670,7 @@ static int d40_alloc_chan_resources(struct dma_chan *chan) if (err) { dev_err(&d40c->chan.dev->device, "[%s] Failed to allocate channel\n", __func__); - goto err_alloc; + goto fail; } /* Fill in basic CFG register values */ @@ -1699,17 +1703,9 @@ static int d40_alloc_chan_resources(struct dma_chan *chan) __func__); } } - +fail: spin_unlock_irqrestore(&d40c->lock, flags); - return 0; - - err_config: - (void) d40_free_dma(d40c); - err_alloc: - spin_unlock_irqrestore(&d40c->lock, flags); - dev_err(&d40c->chan.dev->device, - "[%s] Channel allocation failed\n", __func__); - return -EINVAL; + return err; } static void d40_free_chan_resources(struct dma_chan *chan) -- 1.6.3.3