Thread (1 message) 1 message, 1 author, 2016-11-24

Tearing down DMA transfer setup after DMA client has finished

From: Måns Rullgård <hidden>
Date: 2016-11-24 16:37:21
Also in: lkml

Mason [off-list ref] writes:
On 24/11/2016 15:17, M?ns Rullg?rd wrote:
quoted
Mason wrote:
quoted
[   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?
No, but it would be possible to defer the teardown to the tasklet.
Having said that, I'm not sure it's such a great idea since the tasklet
could be held up for an arbitrary length of time waiting for the target
to finish.
quoted
quoted
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.)
This needs more than a new flag anyhow.
(FWIW, both the NFC and the MBUS agent are custom designs,
not third-party IP blocks.)
Sure, but who knows what will be in the next chip?

-- 
M?ns Rullg?rd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help