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

Reply via email to