All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] dmaengine: rcar-dmac: fix resource freeing synchronization
@ 2017-03-28 22:40 Niklas Söderlund
  2017-03-28 22:40 ` [PATCH 1/3] dmaengine: rcar-dmac: store channel IRQ in struct rcar_dmac_chan Niklas Söderlund
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Niklas Söderlund @ 2017-03-28 22:40 UTC (permalink / raw)
  To: Vinod Koul, dmaengine, linux-renesas-soc
  Cc: Yoshihiro Shimoda, Lars-Peter Clausen, Hiroyuki Yokoyama,
	Niklas Söderlund

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

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2017-05-15 23:12 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-28 22:40 [PATCH 0/3] dmaengine: rcar-dmac: fix resource freeing synchronization Niklas Söderlund
2017-03-28 22:40 ` [PATCH 1/3] dmaengine: rcar-dmac: store channel IRQ in struct rcar_dmac_chan Niklas Söderlund
2017-03-28 22:40 ` [PATCH 2/3] dmaengine: rcar-dmac: implement device_synchronize() Niklas Söderlund
2017-03-28 22:40 ` [PATCH 3/3] dmaengine: rcar-dmac: wait for ISR to finish before freeing resources Niklas Söderlund
2017-03-29 12:31   ` Geert Uytterhoeven
2017-03-29 13:30     ` Niklas Söderlund
2017-03-30  7:38       ` Niklas Söderlund
2017-04-05  3:25         ` Vinod Koul
2017-04-05  9:14           ` Niklas Söderlund
2017-04-05 10:40             ` Geert Uytterhoeven
2017-04-07 11:33               ` Laurent Pinchart
2017-05-12 12:49                 ` Niklas Söderlund
2017-05-14 12:01                   ` Vinod Koul
2017-05-15 23:12                     ` Niklas Söderlund

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.