[PATCH 0/3] dmaengine: rcar-dmac: fix resource freeing synchronization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

--
To unsubscribe from this list: send the line "unsubscribe dmaengine" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux PCI]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux