From afd1115a6e9948a775d0475cc5df5056c60e0381 Mon Sep 17 00:00:00 2001 From: Jonas Aaberg Date: Fri, 16 Apr 2010 15:02:00 +0200 Subject: [PATCH 17/45] 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 | 25 ++++++++++--------------- 1 files changed, 10 insertions(+), 15 deletions(-) diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c index d952201..0ca6508 100644 --- a/drivers/dma/ste_dma40.c +++ b/drivers/dma/ste_dma40.c @@ -1269,7 +1269,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; } @@ -1687,8 +1687,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); @@ -1696,7 +1700,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; } err = d40_config_chan(d40c, &d40c->dma_cfg, is_free_phy); @@ -1704,19 +1708,10 @@ static int d40_alloc_chan_resources(struct dma_chan *chan) dev_err(&d40c->chan.dev->device, "[%s] Failed to configure channel\n", __func__); - goto err_config; } - - spin_unlock_irqrestore(&d40c->lock, flags); - return 0; - - err_config: - (void) d40_free_dma(d40c); - err_alloc: +fail: 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