linux/drivers/dma
Michael Olbrich 1d069bfa3c dmaengine: imx-sdma: ack channel 0 IRQ in the interrupt handler
Currently the handler ignores the channel 0 interrupt and thus doesn't ack
it properly. This is done in order to allow sdma_run_channel0() to poll
on the irq status bit, as this function may be called in atomic context,
but needs to know when the channel has finished.

This works mostly, as the polling happens under a spinlock, disabling IRQs
on the local CPU, leaving only a very slight race window for a spurious
IRQ to happen if the handler is executed on another CPU in an SMP system.
Still this is clearly suboptimal.
This behavior turns into a real problem on an RT system, where the spinlock
doesn't disable IRQs on the local CPU. Not acking the IRQ in the handler
in such a setup is very likely to drown the CPU in an IRQ storm, leaving
it unable to make any progress in the polling loop, leading to the IRQ
never being acked.

Fix this by properly acknowledging the channel 0 IRQ in the handler.
As the IRQ status bit can no longer be used to poll for the channel
completion, switch over to using the SDMA_H_STATSTOP register for this
purpose, where bit 0 is cleared by the hardware when the channel is done.

Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2016-07-12 10:17:46 +05:30
..
bestcomm dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
dw dmaengine: dw: pass platform data via struct dw_dma_chip 2016-05-02 15:31:05 +05:30
hsu dmaengine updates for 4.7 2016-05-19 11:47:18 -07:00
ioat dmaengine: ioatdma: disable relaxed ordering for ioatdma 2016-05-14 13:36:52 +05:30
ipu genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
ppc4xx dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
qcom dmaengine: qcom_hidma: fix return value check in hidma_mgmt_of_populate_channels() 2016-07-12 10:14:41 +05:30
sh dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
xilinx dmaengine updates for 4.7 2016-05-19 11:47:18 -07:00
acpi-dma.c dmaengine: acpi-dma: align debug message with flow 2016-02-22 09:06:09 +05:30
amba-pl08x.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
at_hdmac_regs.h dmaengine: at_hdmac: use %pad format string for dma_addr_t 2015-11-16 09:21:05 +05:30
at_hdmac.c dmaengine: at_hdmac: use %pad format string for dma_addr_t 2015-11-16 09:21:05 +05:30
at_xdmac.c dmaengine: at_xdmac: fix debug string 2016-06-30 08:52:17 +05:30
bcm2835-dma.c dmaengine: bcm2835: fix typo/added newline in legacy-mode warning message 2016-05-02 15:08:19 +05:30
coh901318_lli.c
coh901318.c dmaengine: coh901318: Only calculate residue if txstate exists. 2016-06-21 21:35:00 +05:30
coh901318.h
cppi41.c
dma-axi-dmac.c dmaengine: axi_dmac: Add synchronization support 2015-11-16 08:28:52 +05:30
dma-jz4740.c
dma-jz4780.c dmaengine: jz4780: Kill tasklets before unregistering the device 2015-08-18 22:28:50 +05:30
dmaengine.c Merge branch 'topic/core' into for-linus 2016-05-17 10:13:40 +05:30
dmaengine.h
dmatest.c
edma.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
ep93xx_dma.c dmaengine: ep93xx: Treat STALL and NFB IRQs same way 2016-01-25 09:49:55 +05:30
fsl_raid.c
fsl_raid.h
fsl-edma.c dmaengine: fsl-edma: print error code in error messages. 2016-06-21 21:34:59 +05:30
fsldma.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
fsldma.h
idma64.c dmaengine: idma64: clear LLP_[SD]_EN bits in last descriptor 2016-02-15 22:06:45 +05:30
idma64.h asm-generic changes for 4.6 2016-03-24 23:13:48 -07:00
img-mdc-dma.c dmaengine: mdc: Correct terminate_all handling 2015-12-18 11:12:29 +05:30
imx-dma.c dmaengine: Add an enum for the dmaengine alignment constraints 2015-08-05 10:53:52 +05:30
imx-sdma.c dmaengine: imx-sdma: ack channel 0 IRQ in the interrupt handler 2016-07-12 10:17:46 +05:30
iop-adma.c dma, mm/pat: Rename dma_*_writecombine() to dma_*_wc() 2016-03-09 14:57:51 +01:00
k3dma.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
Kconfig Merge branch 'topic/xilinx' into for-linus 2016-05-17 10:15:34 +05:30
lpc18xx-dmamux.c dmaengine: add driver for lpc18xx dmamux 2015-08-18 22:12:14 +05:30
Makefile dmaengine: tegra-adma: Add support for Tegra210 ADMA 2016-05-13 14:56:24 +05:30
mic_x100_dma.c dma/mic_x100_dma: IS_ERR() vs PTR_ERR() typo 2016-03-03 21:13:01 +05:30
mic_x100_dma.h dmaengine: Add an enum for the dmaengine alignment constraints 2015-08-05 10:53:52 +05:30
mmp_pdma.c dmaengine: mmp_pdma: Use dma_pool_zalloc 2016-05-03 12:23:11 +05:30
mmp_tdma.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
moxart-dma.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
mpc512x_dma.c dmaengine: mpc512x: Fix code style 2016-04-04 09:50:10 -07:00
mv_xor.c dmaengine: mv_xor: add support for Armada 3700 SoC 2016-05-03 12:27:47 +05:30
mv_xor.h dmaengine: mv_xor: use SoC type instead of directly the operation mode 2016-05-03 12:27:47 +05:30
mxs-dma.c
nbpfaxi.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
of-dma.c dmaengine: of_dma: approximate an average distribution 2016-05-14 13:34:10 +05:30
omap-dma.c dmaengine: omap-dma: Do not suppress interrupts for memcpy 2016-04-05 09:09:42 -07:00
pch_dma.c dmaengine: Remove remaining FSF mailing addresses 2015-07-06 19:18:53 +05:30
pl330.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
pxa_dma.c dmaengine: pxa_dma: remove duplicate const qualifier 2016-04-26 21:59:46 +05:30
s3c24xx-dma.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
sa11x0-dma.c
sirf-dma.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
ste_dma40_ll.c
ste_dma40_ll.h
ste_dma40.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
stm32-dma.c dmaengine: stm32-dma: Fix unchecked deference of chan->desc 2015-12-10 09:45:22 +05:30
sun4i-dma.c remove lots of IS_ERR_VALUE abuses 2016-05-27 15:26:11 -07:00
sun6i-dma.c dmaengine: sun6i-dma: Only calculate residue if state exists. 2016-06-21 21:35:00 +05:30
tegra20-apb-dma.c dmaengine: tegra-apb: Return the actual descriptor status 2016-06-30 08:53:15 +05:30
tegra210-adma.c dmaengine: tegra-adma: Add support for Tegra210 ADMA 2016-05-13 14:56:24 +05:30
ti-dma-crossbar.c dmaengine: ti-dma-crossbar: dra7: Support for reserving DMA event ranges 2015-11-30 15:09:16 +05:30
timb_dma.c dmaengine: Remove site specific OOM error messages on kzalloc 2016-06-21 21:35:00 +05:30
TODO
txx9dmac.c
txx9dmac.h
virt-dma.c dmaengine: virt-dma: don't always free descriptor upon completion 2015-11-16 08:32:16 +05:30
virt-dma.h Merge branch 'topic/async' into for-linus 2016-01-06 15:17:47 +05:30
xgene-dma.c dmaengine: xgene-dma: Fix double IRQ issue by setting IRQ_DISABLE_UNLAZY flag 2016-01-07 11:09:36 +05:30
zx296702_dma.c dmaengine updates for 4.4-rc1 2015-11-10 10:05:17 -08:00