diff options
author | Robert Jarzmik <robert.jarzmik@free.fr> | 2016-07-11 00:50:49 +0300 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2016-07-23 13:37:29 +0300 |
commit | 7d604663255ac757ab4b0e17f533cba136486551 (patch) | |
tree | 593d64dd9bb2a23a7e53ae2a0a51f35ccc0b7af0 /ipc/syscall.c | |
parent | 0d605ba0b8ce7f5963124853774cc9bd84589a99 (diff) | |
download | linux-7d604663255ac757ab4b0e17f533cba136486551.tar.xz |
dmaengine: pxa_dma: implement device_synchronize
Implement the function which wait until a dma channel is stopped to have
a synchronization point.
This also protects the pxad_remove() from races, such as spurious
interrupts while removing the driver, because :
- as long as there is one dma channel requested, ie. dma_chan_get() but
no dma_chan_put(), the try_module_get() of dma_chan_get() prevents
the remove() routine from running
- when the last channel is released, ie. the last dma_chan_put() is
called, if there is a running DMA, pxad_synchronize() is called
- pxad_synchronize() waits for the channel to stop, which in turn
ensures on pxa architecture that the interrupt cannot be fired anymore
Reported-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'ipc/syscall.c')
0 files changed, 0 insertions, 0 deletions