On Tue, May 16, 2017 at 01:09:14AM +0200, Niklas Söderlund wrote:
> 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 .
> 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:
> Here dmaengine_synchronize() is called prior to rcar_dmac_chan_halt()
> so an extra synchronisation to wait for any running ISR is still
> 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.
Applied now, thanks