All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/3] dmaengine: rcar-dmac: fix resource freeing synchronization
@ 2017-05-15 23:09 Niklas Söderlund
  2017-05-15 23:09 ` [PATCH v2 1/3] dmaengine: rcar-dmac: store channel IRQ in struct rcar_dmac_chan Niklas Söderlund
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Niklas Söderlund @ 2017-05-15 23:09 UTC (permalink / raw)
  To: Vinod Koul, dmaengine, linux-renesas-soc
  Cc: Yoshihiro Shimoda, Lars-Peter Clausen, Hiroyuki Yokoyama,
	Geert Uytterhoeven, Laurent Pinchart, 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.12-rc1 and is tested on r8a7795 Salvator-X.

1. https://patchwork.kernel.org/patch/9557691/

* Changes since v1
- Rebased to v4.12-rc1

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.13.0

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

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

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-15 23:09 [PATCH v2 0/3] dmaengine: rcar-dmac: fix resource freeing synchronization Niklas Söderlund
2017-05-15 23:09 ` [PATCH v2 1/3] dmaengine: rcar-dmac: store channel IRQ in struct rcar_dmac_chan Niklas Söderlund
2017-05-19  3:51   ` Vinod Koul
2017-05-19  6:59     ` Geert Uytterhoeven
2017-05-19  9:24       ` Vinod Koul
2017-05-15 23:09 ` [PATCH v2 2/3] dmaengine: rcar-dmac: implement device_synchronize() Niklas Söderlund
2017-05-15 23:09 ` [PATCH v2 3/3] dmaengine: rcar-dmac: wait for ISR to finish before freeing resources Niklas Söderlund
2017-05-19  9:25 ` [PATCH v2 0/3] dmaengine: rcar-dmac: fix resource freeing synchronization Vinod Koul

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.