Hi, This series fix resource freeing synchronization by: 1. Patch 1/3 Store the IRQ number in the global struct so it can be used later together with synchronize_irq(). 2. Patch 2/3 Adding support for the device_synchronize() callback in patch 2/3. 3. Patch 3/3 Waiting for any ISR that might still be running after the channel is halted prior to freeing its resources. This was patch previously part of a patch sent out by Yoshihiro Shimoda and authored by Hiroyuki Yokoyama, see [1]. In that thread it was suggested by Lars-Peter Clausen to instead implement the device_synchronize() callback. Unfortunately this is not enough to solve the issue. In rcar_dmac_free_chan_resources() the channel is halted by a call to rcar_dmac_chan_halt() and then directly moves on to freeing resources, here it is still needed to add a wait for any ISR to finish before freeing the resources, despite that a device_synchronize() have been added. This is because call chain: dma_release_channel() dma_chan_put() dmaengine_synchronize() rcar_dmac_free_chan_resources() rcar_dmac_chan_halt() Here dmaengine_synchronize() is called prior to rcar_dmac_chan_halt() so an extra synchronisation to wait for any running ISR is still needed. By both adding a device_synchronize() which can be used in conjunction with device_terminate_all() and fiends and by adding an explicit synchronize_irq() when freeing channel resources I feel the synchronisation for freeing channel resources are in a much better shape. It also solves the issue in the original mail thread. The series is based on v4.11-rc1 and is tested on r8a7795 Salvator-X. 1. https://patchwork.kernel.org/patch/9557691/ Niklas Söderlund (3): dmaengine: rcar-dmac: store channel IRQ in struct rcar_dmac_chan dmaengine: rcar-dmac: implement device_synchronize() dmaengine: rcar-dmac: wait for ISR to finish before freeing resources drivers/dma/sh/rcar-dmac.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) -- 2.12.0