| From d607a7087661613a9c1e4a45ae548570061bc6b8 Mon Sep 17 00:00:00 2001 |
| From: Guennadi Liakhovetski <g.liakhovetski@gmx.de> |
| Date: Mon, 20 Jun 2011 17:02:47 +0200 |
| Subject: dmaengine: failure to get a specific DMA channel is not critical |
| |
| There exist systems with multiple DMA controllers with different |
| capabilities. For example, on some sh-mobile / rmobile systems there are |
| DMA controllers, whose channels can be configured to be used with |
| SD- and MMC-host controllers, serial ports etc. Besides there are also |
| DMA controllers, that can only be used for one special function, e.g., |
| for USB. In such cases the DMA client filter function can just choose |
| to specify to the DMA driver, which channel it needs. Then the |
| .device_alloc_chan_resources() method of the DMA driver will check, |
| whether it can provide that dunction. If not, it will fail and the loop |
| in __dma_request_channel() will continue to the next DMA device, until |
| it finds a suitable one. This works fine with just one minor glitch: |
| the kernel logs error messages like |
| |
| dmaengine: failed to get <channel name>: (-<error code>) |
| |
| after each such non-critical failure. This patch lowers priority of |
| this message to the debug level. |
| |
| Reported-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> |
| Tested-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| Tested-by: Magnus Damm <damm@opensource.se> |
| Signed-off-by: Vinod Koul <vinod.koul@intel.com> |
| (cherry picked from commit a03a202e95fdaa3ff52ccfc2594ec531e5917816) |
| |
| Signed-off-by: Simon Horman <horms@verge.net.au> |
| --- |
| drivers/dma/dmaengine.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c |
| index 48694c3..26374b2 100644 |
| --- a/drivers/dma/dmaengine.c |
| +++ b/drivers/dma/dmaengine.c |
| @@ -510,8 +510,8 @@ struct dma_chan *__dma_request_channel(dma_cap_mask_t *mask, dma_filter_fn fn, v |
| dma_chan_name(chan)); |
| list_del_rcu(&device->global_node); |
| } else if (err) |
| - pr_err("dmaengine: failed to get %s: (%d)\n", |
| - dma_chan_name(chan), err); |
| + pr_debug("dmaengine: failed to get %s: (%d)\n", |
| + dma_chan_name(chan), err); |
| else |
| break; |
| if (--device->privatecnt == 0) |
| -- |
| 1.7.10.2.565.gbd578b5 |
| |