From: slash.tmp@free.fr (Mason)
To: linux-arm-kernel@lists.infradead.org
Subject: Tearing down DMA transfer setup after DMA client has finished
Date: Thu, 24 Nov 2016 16:20:16 +0100 [thread overview]
Message-ID: <58370530.5080605@free.fr> (raw)
In-Reply-To: <yw1xr3619d3l.fsf@unicorn.mansr.com>
On 24/11/2016 15:17, M?ns Rullg?rd wrote:
> Mason wrote:
>
>> [ 35.085854] SETUP DMA
>> [ 35.088272] START NAND TRANSFER
>> [ 35.091670] tangox_dma_pchan_start from tangox_dma_irq
>> [ 35.096882] tango_dma_callback from vchan_complete
>> [ 45.102513] DONE FAKE SPINNING
>>
>> So the IRQ rolls in, the ISR calls tangox_dma_pchan_start,
>> which calls tangox_dma_pchan_detach to tear down the sbox
>> setup; and only sometime later does the DMA framework call
>> my callback function.
>
> Yes, I realised this soon after I said it. The dma driver could be
> rearranged to make it work though.
There is a way to make the tasklet run and invoke the callback
before the interrupt service routine proceeds? Can you say more
about this?
>> So far, the work-arounds I've tested are:
>>
>> 1) delay sbox tear-down by 10 ?s in tangox_dma_pchan_detach.
>> 2) statically setup sbox in probe, and never touch it henceforth.
>>
>> WA1 is fragile, it might break for devices other than NFC.
>> WA2 is what I used when I wrote the NFC driver.
>>
>> Can tangox_dma_irq() be changed to have the framework call
>> the client's callback *before* tangox_dma_pchan_start?
>>
>> (Thinking out loud) The DMA_PREP_INTERRUPT requests that the
>> DMA framework invoke the callback from tasklet context,
>> maybe a different flag DMA_PREP_INTERRUPT_EX can request
>> calling the call-back directly from within the ISR?
>>
>> (Looking at existing flags) Could I use DMA_CTRL_ACK?
>> Description sounds like some kind hand-shake between
>> client and dmaengine.
>>
>> Grepping for DMA_PREP_INTERRUPT, I don't see where the framework
>> checks that flag to spawn the tasklet? Or is that up to each
>> driver individually?
>
> Those flags all have defined meanings and abusing them for other things
> is a bad idea. As far as possible, device drivers should work with any
> dma driver.
I was asking about introducing a new flag, not abusing existing
flags. (I don't understand the semantics of DMA_CTRL_ACK.)
(FWIW, both the NFC and the MBUS agent are custom designs,
not third-party IP blocks.)
Regards.
WARNING: multiple messages have this Message-ID (diff)
From: Mason <slash.tmp@free.fr>
To: Mans Rullgard <mans@mansr.com>
Cc: dmaengine@vger.kernel.org, Vinod Koul <vinod.koul@intel.com>,
Linus Walleij <linus.walleij@linaro.org>,
Dan Williams <dan.j.williams@intel.com>,
LKML <linux-kernel@vger.kernel.org>,
Linux ARM <linux-arm-kernel@lists.infradead.org>,
Jon Mason <jdmason@kudzu.us>, Mark Brown <broonie@kernel.org>,
Lars-Peter Clausen <lars@metafoo.de>,
Lee Jones <lee.jones@linaro.org>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Arnd Bergmann <arnd@arndb.de>,
Maxime Ripard <maxime.ripard@free-electrons.com>,
Dave Jiang <dave.jiang@intel.com>,
Peter Ujfalusi <peter.ujfalusi@ti.com>,
Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
Sebastian Frias <sf84@laposte.net>,
Thibaud Cornic <thibaud_cornic@sigmadesigns.com>,
Russell King <linux@arm.linux.org.uk>
Subject: Re: Tearing down DMA transfer setup after DMA client has finished
Date: Thu, 24 Nov 2016 16:20:16 +0100 [thread overview]
Message-ID: <58370530.5080605@free.fr> (raw)
In-Reply-To: <yw1xr3619d3l.fsf@unicorn.mansr.com>
On 24/11/2016 15:17, Måns Rullgård wrote:
> Mason wrote:
>
>> [ 35.085854] SETUP DMA
>> [ 35.088272] START NAND TRANSFER
>> [ 35.091670] tangox_dma_pchan_start from tangox_dma_irq
>> [ 35.096882] tango_dma_callback from vchan_complete
>> [ 45.102513] DONE FAKE SPINNING
>>
>> So the IRQ rolls in, the ISR calls tangox_dma_pchan_start,
>> which calls tangox_dma_pchan_detach to tear down the sbox
>> setup; and only sometime later does the DMA framework call
>> my callback function.
>
> Yes, I realised this soon after I said it. The dma driver could be
> rearranged to make it work though.
There is a way to make the tasklet run and invoke the callback
before the interrupt service routine proceeds? Can you say more
about this?
>> So far, the work-arounds I've tested are:
>>
>> 1) delay sbox tear-down by 10 µs in tangox_dma_pchan_detach.
>> 2) statically setup sbox in probe, and never touch it henceforth.
>>
>> WA1 is fragile, it might break for devices other than NFC.
>> WA2 is what I used when I wrote the NFC driver.
>>
>> Can tangox_dma_irq() be changed to have the framework call
>> the client's callback *before* tangox_dma_pchan_start?
>>
>> (Thinking out loud) The DMA_PREP_INTERRUPT requests that the
>> DMA framework invoke the callback from tasklet context,
>> maybe a different flag DMA_PREP_INTERRUPT_EX can request
>> calling the call-back directly from within the ISR?
>>
>> (Looking at existing flags) Could I use DMA_CTRL_ACK?
>> Description sounds like some kind hand-shake between
>> client and dmaengine.
>>
>> Grepping for DMA_PREP_INTERRUPT, I don't see where the framework
>> checks that flag to spawn the tasklet? Or is that up to each
>> driver individually?
>
> Those flags all have defined meanings and abusing them for other things
> is a bad idea. As far as possible, device drivers should work with any
> dma driver.
I was asking about introducing a new flag, not abusing existing
flags. (I don't understand the semantics of DMA_CTRL_ACK.)
(FWIW, both the NFC and the MBUS agent are custom designs,
not third-party IP blocks.)
Regards.
next prev parent reply other threads:[~2016-11-24 15:20 UTC|newest]
Thread overview: 164+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-23 10:25 Tearing down DMA transfer setup after DMA client has finished Mason
2016-11-23 10:25 ` Mason
2016-11-23 12:13 ` Måns Rullgård
2016-11-23 12:13 ` Måns Rullgård
2016-11-23 12:41 ` Mason
2016-11-23 12:41 ` Mason
2016-11-23 17:21 ` Måns Rullgård
2016-11-23 17:21 ` Måns Rullgård
2016-11-24 10:53 ` Mason
2016-11-24 10:53 ` Mason
2016-11-24 14:17 ` Måns Rullgård
2016-11-24 14:17 ` Måns Rullgård
2016-11-24 15:20 ` Mason [this message]
2016-11-24 15:20 ` Mason
2016-11-24 16:37 ` Måns Rullgård
2016-11-24 16:37 ` Måns Rullgård
2016-11-25 4:55 ` Vinod Koul
2016-11-25 4:55 ` Vinod Koul
2016-11-25 11:57 ` Måns Rullgård
2016-11-25 11:57 ` Måns Rullgård
2016-11-25 14:05 ` Mason
2016-11-25 14:05 ` Mason
2016-11-25 14:12 ` Måns Rullgård
2016-11-25 14:12 ` Måns Rullgård
2016-11-25 14:28 ` Mason
2016-11-25 14:28 ` Mason
2016-11-25 14:42 ` Måns Rullgård
2016-11-25 14:42 ` Måns Rullgård
2016-11-25 12:45 ` Russell King - ARM Linux
2016-11-25 12:45 ` Russell King - ARM Linux
2016-11-25 13:07 ` Måns Rullgård
2016-11-25 13:07 ` Måns Rullgård
2016-11-25 13:34 ` Russell King - ARM Linux
2016-11-25 13:34 ` Russell King - ARM Linux
2016-11-25 13:50 ` Måns Rullgård
2016-11-25 13:50 ` Måns Rullgård
2016-11-25 13:58 ` Russell King - ARM Linux
2016-11-25 13:58 ` Russell King - ARM Linux
2016-11-25 14:03 ` Måns Rullgård
2016-11-25 14:03 ` Måns Rullgård
2016-11-25 14:17 ` Russell King - ARM Linux
2016-11-25 14:17 ` Russell King - ARM Linux
2016-11-25 14:40 ` Måns Rullgård
2016-11-25 14:40 ` Måns Rullgård
2016-11-25 14:56 ` Russell King - ARM Linux
2016-11-25 14:56 ` Russell King - ARM Linux
2016-11-25 15:08 ` Måns Rullgård
2016-11-25 15:08 ` Måns Rullgård
2016-11-25 15:02 ` Mason
2016-11-25 15:02 ` Mason
2016-11-25 15:12 ` Måns Rullgård
2016-11-25 15:12 ` Måns Rullgård
2016-11-25 15:21 ` Mason
2016-11-25 15:21 ` Mason
2016-11-25 15:28 ` Måns Rullgård
2016-11-25 15:28 ` Måns Rullgård
2016-11-25 12:46 ` Mason
2016-11-25 12:46 ` Mason
2016-11-25 13:11 ` Måns Rullgård
2016-11-25 13:11 ` Måns Rullgård
2016-11-25 14:21 ` Mason
2016-11-25 14:21 ` Mason
2016-11-25 14:37 ` Måns Rullgård
2016-11-25 14:37 ` Måns Rullgård
2016-11-25 15:35 ` Mason
2016-11-25 15:35 ` Mason
2016-11-29 18:25 ` Mason
2016-11-29 18:25 ` Mason
2016-12-06 5:12 ` Vinod Koul
2016-12-06 5:12 ` Vinod Koul
2016-12-06 12:42 ` Mason
2016-12-06 12:42 ` Mason
2016-12-06 13:14 ` Måns Rullgård
2016-12-06 13:14 ` Måns Rullgård
2016-12-06 15:24 ` Mason
2016-12-06 15:24 ` Mason
2016-12-06 15:34 ` Måns Rullgård
2016-12-06 15:34 ` Måns Rullgård
2016-12-06 22:55 ` Mason
2016-12-06 22:55 ` Mason
2016-12-07 16:43 ` Vinod Koul
2016-12-07 16:43 ` Vinod Koul
2016-12-07 16:45 ` Måns Rullgård
2016-12-07 16:45 ` Måns Rullgård
2016-12-08 10:39 ` Vinod Koul
2016-12-08 10:39 ` Vinod Koul
2016-12-08 10:54 ` Mason
2016-12-08 10:54 ` Mason
2016-12-08 11:18 ` Geert Uytterhoeven
2016-12-08 11:18 ` Geert Uytterhoeven
2016-12-08 11:47 ` Måns Rullgård
2016-12-08 11:47 ` Måns Rullgård
2016-12-08 12:03 ` Geert Uytterhoeven
2016-12-08 12:03 ` Geert Uytterhoeven
2016-12-08 12:17 ` Mason
2016-12-08 12:17 ` Mason
2016-12-08 12:21 ` Måns Rullgård
2016-12-08 12:21 ` Måns Rullgård
2016-12-08 16:37 ` Vinod Koul
2016-12-08 16:37 ` Vinod Koul
2016-12-08 16:48 ` Måns Rullgård
2016-12-08 16:48 ` Måns Rullgård
2016-12-09 6:59 ` Vinod Koul
2016-12-09 6:59 ` Vinod Koul
2016-12-09 10:25 ` Sebastian Frias
2016-12-09 10:25 ` Sebastian Frias
2016-12-09 11:34 ` Måns Rullgård
2016-12-09 11:34 ` Måns Rullgård
2016-12-09 11:35 ` 1Måns Rullgård
2016-12-09 11:35 ` 1Måns Rullgård
2016-12-09 17:17 ` Vinod Koul
2016-12-09 17:17 ` Vinod Koul
2016-12-09 17:28 ` Måns Rullgård
2016-12-09 17:28 ` Måns Rullgård
2016-12-09 17:53 ` Vinod Koul
2016-12-09 17:53 ` Vinod Koul
2016-12-09 17:34 ` Mason
2016-12-09 17:34 ` Mason
2016-12-09 17:56 ` Vinod Koul
2016-12-09 17:56 ` Vinod Koul
2016-12-09 18:17 ` Vinod Koul
2016-12-09 18:17 ` Vinod Koul
2016-12-09 18:23 ` Mason
2016-12-09 18:23 ` Mason
2016-12-12 5:01 ` Vinod Koul
2016-12-12 5:01 ` Vinod Koul
2016-12-15 11:17 ` Mark Brown
2016-12-15 11:17 ` Mark Brown
2016-12-08 11:44 ` Måns Rullgård
2016-12-08 11:44 ` Måns Rullgård
2016-12-08 11:59 ` Geert Uytterhoeven
2016-12-08 11:59 ` Geert Uytterhoeven
2016-12-08 12:20 ` Måns Rullgård
2016-12-08 12:20 ` Måns Rullgård
2016-12-08 12:31 ` Geert Uytterhoeven
2016-12-08 12:31 ` Geert Uytterhoeven
2016-12-08 12:41 ` Mason
2016-12-08 12:41 ` Mason
2016-12-08 12:44 ` Måns Rullgård
2016-12-08 12:44 ` Måns Rullgård
2016-12-08 13:29 ` Mason
2016-12-08 13:29 ` Mason
2016-12-08 13:39 ` Måns Rullgård
2016-12-08 13:39 ` Måns Rullgård
2016-12-08 15:50 ` Vinod Koul
2016-12-08 15:50 ` Vinod Koul
2016-12-08 16:36 ` Måns Rullgård
2016-12-08 16:36 ` Måns Rullgård
2016-12-08 15:40 ` Vinod Koul
2016-12-08 15:40 ` Vinod Koul
2016-12-08 15:43 ` Mason
2016-12-08 15:43 ` Mason
2016-12-08 16:21 ` Vinod Koul
2016-12-08 16:21 ` Vinod Koul
2016-12-08 16:46 ` Måns Rullgård
2016-12-08 16:46 ` Måns Rullgård
2016-12-07 16:41 ` Vinod Koul
2016-12-07 16:41 ` Vinod Koul
2016-12-07 16:44 ` Måns Rullgård
2016-12-07 16:44 ` Måns Rullgård
2016-12-08 10:37 ` Vinod Koul
2016-12-08 10:37 ` Vinod Koul
2016-12-08 11:44 ` Måns Rullgård
2016-12-08 11:44 ` Måns Rullgård
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=58370530.5080605@free.fr \
--to=slash.tmp@free.fr \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.