Thread (17 messages) 17 messages, 3 authors, 2017-01-13

[PATCH v5 3/3] dmaengine: xilinx_dma: Fix race condition in the driver for multiple descriptor scenario

From: Vinod Koul <hidden>
Date: 2017-01-13 06:22:26
Also in: linux-devicetree, lkml

On Fri, Jan 13, 2017 at 06:00:44AM +0000, Appana Durga Kedareswara Rao wrote:
Hi Vinod,

	Thanks for the review...

[Snip]
quoted
quoted
quoted
On Sat, Jan 07, 2017 at 12:15:30PM +0530, Kedareswara rao Appana wrote:
quoted
When driver is handling AXI DMA SoftIP When user submits multiple
descriptors back to back on the S2MM(recv) side with the current
driver flow the last buffer descriptor next bd points to a invalid
location resulting the invalid data or errors in the DMA engine.
Can you rephrase this, it a bit hard to understand.
When DMA is receiving packets h/w expects the descriptors Should be in
the form of a ring (I mean h/w buffer descriptor Next descriptor field
should always point to valid address So that when DMA engine go and
fetch that next descriptor it always Sees a valid address).


But with the current driver implementation when user queues Multiple
descriptors the last descriptor next descriptor field Pointing to an
invalid location causing data corruption or Errors from the DMA h/w
engine...

To avoid this issue creating a Buffer descriptor Chain during Channel
allocation and using those buffer descriptors for processing User
requested data.
Is it not doable to to modify the next pointer to point to subsequent transaction.
IOW you are modifying tail descriptor to point to subsequent descriptor.

Btw how and when does DMA stop, assuming it is circular it never would, isn't
there a valid/stop flag associated with a descriptor which tells DMA engine what
to do next
There are two registers that controls the DMA transfers.
Current descriptor and tail descriptor register. 
When current descriptor reaches tail descriptor dma engine will pause.

When reprogramming the tail descriptor the DMA engine will starts fetching descriptors again.

But with the existing driver flow if we reprogram the tail descriptor
The tail descriptor next descriptor field is pointing to an invalid location
Causing data corruption...
So the solution is..?
quoted
Btw there is something wrong with your MUA perhaps line are titlecased for no
reason. This is typically behavious of non linux tool which may not be great tool
for this work.
Thanks for pointing it out.
I usually replies from outlook from a windows machine.
Will check with others in my team how they configured their mail client.
Yeah that isnt right tool for the job. See
Documentation/process/email-clients.rst

FWIW, I use mutt, vim as editor with exchange servers, seems to work well
for me now.

-- 
~Vinod
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help