linux_dsm_epyc7002/drivers/dma
Yoshihiro Shimoda 26fd830a99 dmaengine: shdma: fix a race condition in __ld_cleanup()
This patch fixes a race condition about a list of shdma-base driver.
If we don't apply this patch, a dma slave driver (especially a usb
peripheral driver) may not be able to start the transfer.

If a dma slave driver has a callback, __ld_cleanup() will call
the callback before this driver removes the list. After the callback,
since the return value of __ld_cleanup() is not zero,
shdma_chan_ld_cleanup() calls __ld_cleanup() again. And, __ld_clean()
will removes the list.

At this time, if a dma slave driver calls dmaengine_submit() before
this driver removes the list, this driver will set schan->pm_state
to SHDMA_PM_PENDING in shdma_tx_submit(). And then, even if a dma
slave driver calls dma_async_issue_pending(), this driver don't
start the transfer because the schan->pm_state is SHDMA_PM_PENDING
in shdma_issue_pending().

So, this patch adds a new condition in __ld_clean() to check if the
schan->pm_state is SHDMA_PM_PENDING or not.

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2014-11-17 13:50:42 +05:30
..
bestcomm drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
dw dmaengine: dw: export probe()/remove() and Co to users 2014-10-15 20:31:05 +05:30
ioat net_dma: simple removal 2014-09-28 07:05:16 -07:00
ipu dmaengine: ipu: use return value of request_irq 2014-07-25 15:39:50 +05:30
ppc4xx Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma 2014-01-29 20:27:23 -08:00
sh dmaengine: shdma: fix a race condition in __ld_cleanup() 2014-11-17 13:50:42 +05:30
xilinx dmaengine: xilinx: vdma: icg should be difference of stride and hsize 2014-11-06 13:11:47 +05:30
acpi-dma.c acpi-dma: convert to return error code when asked for channel 2014-02-11 23:30:50 +05:30
amba-pl08x.c dmaengine: pl08x: Remove chancnt affectations 2014-11-06 11:32:44 +05:30
at_hdmac_regs.h dmaengine: at_hdmac: remove unused function 2013-12-12 22:43:41 -08:00
at_hdmac.c dma: at_hdmac: fix invalid remaining bytes detection 2014-08-07 21:52:27 +05:30
at_xdmac.c dmaengine: at_xdmac: creation of the atmel eXtended DMA Controller driver 2014-11-06 11:00:08 +05:30
bcm2835-dma.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
coh901318_lli.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2013-02-26 09:24:48 -08:00
coh901318.c dmaengine: coh901318: use dmaengine_terminate_all() API 2014-10-15 21:30:59 +05:30
coh901318.h dma: coh901318: merge header files 2013-01-07 17:36:37 +01:00
cppi41.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
dma-jz4740.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
dmaengine.c dmaengine-3.17 2014-10-07 20:39:25 -04:00
dmaengine.h dmaengine: consolidate initialization of cookies 2012-03-13 11:37:22 +05:30
dmatest.c dmaengine-3.17 2014-10-07 20:39:25 -04:00
edma.c dmaengine: edma: check for echan->edesc => NULL in edma_dma_pause() 2014-10-15 20:55:04 +05:30
ep93xx_dma.c dmaengine: Remove the context argument to the prep_dma_cyclic operation 2014-08-04 13:41:50 +05:30
fsl-edma.c dmaengine: Remove the context argument to the prep_dma_cyclic operation 2014-08-04 13:41:50 +05:30
fsldma.c dmaengine: fsldma: Remove chancnt affectations 2014-11-06 11:32:45 +05:30
fsldma.h dmaengine: Freescale: change descriptor release process for supporting async_tx 2014-07-14 21:32:18 +05:30
imx-dma.c dmaengine: Remove the context argument to the prep_dma_cyclic operation 2014-08-04 13:41:50 +05:30
imx-sdma.c dma: imx-sdma: remove incorrect __init annotation from sdma_init() 2014-11-17 13:50:35 +05:30
intel_mid_dma_regs.h dma: fix comments 2012-09-01 08:57:12 -07:00
intel_mid_dma.c dmaengine: intel_mid_dma: use DMA_COMPLETE for dma completion status 2013-10-25 11:16:04 +05:30
iop-adma.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
k3dma.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
Kconfig dmaengine: sun6i: Add support for Allwinner A23 (sun8i) variant 2014-11-17 13:50:37 +05:30
Makefile dmaengine: at_xdmac: creation of the atmel eXtended DMA Controller driver 2014-11-06 11:00:08 +05:30
mic_x100_dma.c dma: MIC X100 DMA Driver 2014-07-12 09:57:42 -07:00
mic_x100_dma.h dma: MIC X100 DMA Driver 2014-07-12 09:57:42 -07:00
mmp_pdma.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
mmp_tdma.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
moxart-dma.c dmaengine: Add MOXA ART DMA engine driver 2014-01-20 12:32:46 +05:30
mpc512x_dma.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
mv_xor.c Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma 2014-10-18 18:11:04 -07:00
mv_xor.h dma: mv_xor: Add support for DMA_INTERRUPT 2014-09-23 20:17:01 +05:30
mxs-dma.c dmaengine: Remove the context argument to the prep_dma_cyclic operation 2014-08-04 13:41:50 +05:30
nbpfaxi.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
of-dma.c dmaengine: of: add common xlate function for matching by channel id 2014-07-26 00:21:41 +05:30
omap-dma.c dmaengine: omap: Remove chancnt affectations 2014-11-06 11:32:45 +05:30
pch_dma.c dmaengine: pch: fix compilation for alpha target 2014-05-22 18:50:49 +05:30
pl330.c dmaengine: pl330: Correct device assignment. 2014-11-17 13:50:34 +05:30
qcom_bam_dma.c dmaengine: qcom_bam_dma: Add BAM v1.3.0 support 2014-11-17 13:50:40 +05:30
s3c24xx-dma.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
sa11x0-dma.c dmaengine: sa11x0: Remove chancnt affectations 2014-11-06 11:32:45 +05:30
sirf-dma.c dmaengine: sirf: Remove chancnt affectations 2014-11-06 11:36:18 +05:30
ste_dma40_ll.c dmaengine: ste_dma40_ll: Replace meaningless register set with comment 2013-06-04 11:12:10 +02:00
ste_dma40_ll.h dmaengine: ste_dma40: Remove unnecessary call to d40_phy_cfg() 2013-05-23 21:13:19 +02:00
ste_dma40.c dmaengine: Remove the context argument to the prep_dma_cyclic operation 2014-08-04 13:41:50 +05:30
sun6i-dma.c dmaengine: sun6i: Add support for Allwinner A23 (sun8i) variant 2014-11-17 13:50:37 +05:30
tegra20-apb-dma.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
timb_dma.c dmaengine: Remove .owner field for driver 2014-11-06 11:54:18 +05:30
TODO dmaengine: dw: don't perform DMA when dmaengine_submit is called 2014-07-15 22:14:30 +05:30
txx9dmac.c dma: fix build warnings in txx9 2013-12-12 22:43:41 -08:00
txx9dmac.h dmaengine: move last completed cookie into generic dma_chan structure 2012-03-13 11:36:06 +05:30
virt-dma.c dmaengine: virt-dma: add support for cyclic DMA periodic callbacks 2012-07-01 14:15:23 +01:00
virt-dma.h dma: fix vchan_cookie_complete() debug print 2014-01-26 17:33:45 +05:30