linux/drivers/dma
Ira Snyder f04cd40701 fsldma: fix controller lockups
Enabling poisoning in the dmapool API quickly showed that the DMA
controller was fetching descriptors that should not have been in use.
This has caused intermittent controller lockups during testing.

I have been unable to figure out the exact set of conditions which cause
this to happen. However, I believe it is related to the driver using the
hardware registers to track whether the controller is busy or not. The
code can incorrectly decide that the hardware is idle due to lag between
register writes and the hardware actually becoming busy.

To fix this, the driver has been reworked to explicitly track the state
of the hardware, rather than try to guess what it is doing based on the
register values.

This has passed dmatest with 10 threads per channel, 100000 iterations
per thread several times without error. Previously, this would fail
within a few seconds.

Signed-off-by: Ira W. Snyder <iws@ovro.caltech.edu>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2011-03-11 17:52:36 -08:00
..
ioat drivers/dma/ioat: Use the ccflag-y instead of EXTRA_CFLAGS 2010-12-04 15:03:06 -08:00
ipu dma: ipu_idmac: do not lose valid received data in the irq handler 2011-02-14 02:28:16 -08:00
ppc4xx drivers/dma/ppc4xx: Use printf extension %pR for struct resource 2010-12-04 15:03:40 -08:00
amba-pl08x.c DMA: PL08x: fix channel pausing to timeout rather than lockup 2011-01-30 22:03:47 -08:00
at_hdmac_regs.h at_hdmac: implement a private tx_list 2009-09-08 17:53:03 -07:00
at_hdmac.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx 2011-01-17 10:54:41 -08:00
coh901318_lli.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
coh901318_lli.h tree-wide: Assorted spelling fixes 2010-02-09 11:13:56 +01:00
coh901318.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx 2010-10-27 19:04:36 -07:00
dmaengine.c async_tx: make async_tx channel switching opt-in 2010-10-07 17:08:32 -07:00
dmatest.c dmatest: fix automatic buffer unmap type 2011-03-11 17:52:35 -08:00
dw_dmac_regs.h dmaengine/dw_dmac fix: use readl & writel instead of __raw_readl & __raw_writel 2011-03-07 01:12:28 +05:30
dw_dmac.c dw_dmac: Setting Default Burst length for transfers as 16. 2011-03-07 01:12:28 +05:30
fsldma.c fsldma: fix controller lockups 2011-03-11 17:52:36 -08:00
fsldma.h fsldma: fix controller lockups 2011-03-11 17:52:36 -08:00
imx-dma.c dmaengine i.MX dma: initialize dma capabilities outside channel loop 2011-01-31 12:36:23 +01:00
imx-sdma.c Merge branch 'imx' into dmaengine-fixes 2011-02-14 02:40:46 -08:00
intel_mid_dma_regs.h intel_mid_dma: change the slave interface 2010-10-07 15:03:44 -07:00
intel_mid_dma.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx 2011-01-17 10:54:41 -08:00
iop-adma.c Update CONFIG_MD_RAID6_PQ to CONFIG_RAID6_PQ in drivers/dma/iop-adma.c 2011-01-14 17:58:12 -08:00
iovlock.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
Kconfig dw_dmac: Remove compilation dependency from AVR32 and put on HAVE_CLK 2011-03-07 01:12:27 +05:30
Makefile dmaengine: mxs-dma: add dma support for i.MX23/28 2011-03-02 07:06:27 +05:30
mpc512x_dma.c powerpc/512x: try to free dma descriptors in case of allocation failure 2010-12-29 22:29:36 -07:00
mv_xor.c mv_xor: fix race in tasklet function 2011-01-03 01:39:26 -08:00
mv_xor.h mv_xor: implement a private tx_list 2009-09-08 17:53:03 -07:00
mxs-dma.c dmaengine: mxs-dma: add dma support for i.MX23/28 2011-03-02 07:06:27 +05:30
pch_dma.c drivers, pch_dma: Fix warning when CONFIG_PM=n. 2011-03-07 01:26:50 +05:30
pl330.c DMA: PL330: Add dma api driver 2010-05-23 20:28:19 -07:00
shdma.c dma: shdma: don't register the global die notifier multiple times 2011-01-07 11:03:26 +09:00
shdma.h dma: shdma: NMI support. 2010-12-17 19:16:10 +09:00
ste_dma40_ll.c dma40: cyclic xfer support 2011-01-30 22:27:21 -08:00
ste_dma40_ll.h dma40: cyclic xfer support 2011-01-30 22:27:21 -08:00
ste_dma40.c dma40: cyclic xfer support 2011-01-30 22:27:21 -08:00
timb_dma.c dma/timberdale: simplify conditional 2010-10-19 15:20:11 -07:00
txx9dmac.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx 2010-05-21 17:05:46 -07:00
txx9dmac.h txx9dmac: implement a private tx_list 2009-09-08 17:53:03 -07:00