diff options
author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2014-08-03 19:13:03 +0200 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2014-08-04 13:30:31 +0530 |
commit | 67b166847009b009cd9fbcdef6b71558f49e1bd6 (patch) | |
tree | bfa91b9cb4d786d94b4ef76b5a6e04e895b08eb5 /drivers/dma/nbpfaxi.c | |
parent | b45b262cefd5b8eb2ba88d20e5bd295881293894 (diff) |
dmaengine: nbpfaxi: fix a theoretical race
A race possibility exists if a DMA slave driver tries to free channel
resources witout waiting for all transfers to complete and without
explicitly terminating all requests. In such a case the IRQ processing
thread can race with .device_free_chan_resources(). To fix this race empty
all descriptor lists before freeing descriptor cache.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski+renesas@gmail.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/nbpfaxi.c')
-rw-r--r-- | drivers/dma/nbpfaxi.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/dma/nbpfaxi.c b/drivers/dma/nbpfaxi.c index 77c5a890a30..5b40ac8d82d 100644 --- a/drivers/dma/nbpfaxi.c +++ b/drivers/dma/nbpfaxi.c @@ -1054,6 +1054,7 @@ static void nbpf_free_chan_resources(struct dma_chan *dchan) dev_dbg(dchan->device->dev, "Entry %s()\n", __func__); nbpf_chan_halt(chan); + nbpf_chan_idle(chan); /* Clean up for if a channel is re-used for MEMCPY after slave DMA */ nbpf_chan_prepare_default(chan); |