[PATCH 0/7] fsl-dma: fixes for Freescale DMA driver
Liu Qiang-B32616
B32616 at freescale.com
Wed Aug 1 13:47:00 EST 2012
Hi Ira,
My comments inline.
> -----Original Message-----
> From: Ira W. Snyder [mailto:iws at ovro.caltech.edu]
> Sent: Wednesday, August 01, 2012 7:46 AM
> To: linux-crypto at vger.kernel.org
> Cc: linuxppc-dev at lists.ozlabs.org; Liu Qiang-B32616; Ira W. Snyder
> Subject: [PATCH 0/7] fsl-dma: fixes for Freescale DMA driver
>
> From: "Ira W. Snyder" <iws at ovro.caltech.edu>
>
> Hello everyone,
>
> This is my alternative (simpler) attempt at solving the problems reported
> by Qiang Liu with the async_tx API and MD RAID hardware offload support
> when using the Freescale DMA driver.
>
> The bug is caused by this driver freeing descriptors before they have
> been ACKed by software using the async_tx API.
>
> I don't like Qiang Liu's code to check where the hardware is in the
> processing of the descriptor chain, and try to free a partial list of
> descriptors. This was a source of bugs in this driver before I fixed them
> several years ago.
It's a bug which you think the whole list is completed when an interrupt is raised, there is a potential risk when an interrupt is raised by "Programmed Error". The "ld_running" is a s/w concept, we should not depend on it to judge the status of descriptors list.
I know you don't like this process, but it's a safe and common process. You can refer to other dma drivers, like ioap-adma, mv-xor and ibm-ppc440x-adma.
Said far point, usb also take this method to judge which descriptor is completed, I don't know which device can use a s/w list to free all descriptors, you can refer to the implement of dl_reverse_done_list().
If you find any problem in my patch, please point out, or you can give a link about the bug you mentioned many years ago.
Thanks.
>
> Instead, the DMA controller raises an interrupt every time it has
> completed a descriptor chain. This means it is ready for new descriptors:
> no need to try and figure out where it is in the middle of a descriptor
> chain.
Attached again,
The interrupt is only report the state of hardware, we cannot assume all descriptors are finished when an interrupt is raised.
>
> Qiang Liu: I do not have a hardware setup capable of using MD RAID.
> Please test these patches to see if they fix the bug you reported. You
> may use these patches as-is, or build upon them.
I hope we can discuss it based on my patch. If you think my patch will involve some issue, please point out. I'm willing to fix it.
Thanks.
>
> I have tested this using the drivers/dma/dmatest.c driver, as well as the
> CARMA drivers. There are no regressions that I can find.
>
> [ 355.069679] dma0chan3-copy0: terminating after 100000 tests, 0
> failures (status 0) [ 355.192278] dma0chan2-copy0: terminating after
> 100000 tests, 0 failures (status 0)
>
> Ira W. Snyder (5):
> fsl-dma: minimize locking overhead
> fsl-dma: add fsl_dma_free_descriptor() to reduce code duplication
> fsl-dma: move functions to avoid forward declarations
> fsl-dma: fix support for async_tx API
> carma: remove unnecessary DMA_INTERRUPT capability
>
> Qiang Liu (2):
> fsl-dma: remove attribute DMA_INTERRUPT of dmaengine
> fsl-dma: fix a warning of unitialized cookie
>
> drivers/dma/fsldma.c | 318 +++++++++++++++----------
> ------
> drivers/dma/fsldma.h | 1 +
> drivers/misc/carma/carma-fpga-program.c | 1 -
> drivers/misc/carma/carma-fpga.c | 3 +-
> 4 files changed, 159 insertions(+), 164 deletions(-)
>
> --
> 1.7.8.6
>
More information about the Linuxppc-dev
mailing list