2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-21 11:44:01 +08:00
linux-next/drivers/mmc/host
Javier Martin f6ad0a4813 mmc: mxcmmc: fix bug that may block a data transfer forever
The problem can be easily reproduced using a script that loops
copying a file in an SD card to another place in the same SD card
and its related to read transfers. This only happens with DMA enabled.

This is related to the fact that, when reading, an MMC irq signals
the fact that all data from the SD card has been copied to the
internal buffers. However, it doesn't signal whether the DMA transfer
that is in charge of moving data from these internal buffers to RAM
has finished or not. Thus, calling dmaengine_terminate_all() in the
MMC irq routine can cancel an ongoing DMA transfer leaving some data
in the internal buffers that produces an accumulative effect which,
in the end, blocks a read data transfer forever.

The following patch watches DMA irq for reading and MMC irqs for
writing transfers. The 'dangerous' usage of dmaengine_terminate_all()
is removed and a timeout of 10 seconds is added so that the MMC won't
block forever anymore.

Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Chris Ball <cjb@laptop.org>
2012-10-03 10:05:24 -04:00
..
at91_mci.c ARM: at91: code removal of CAP9 SoC 2012-02-03 13:33:05 +01:00
at91_mci.h mmc: at91_mci: move register header from include/ to drivers/ 2011-07-21 10:35:08 -04:00
atmel-mci-regs.h mmc: atmel-mci: AP700x PDC is not connected to MCI 2012-10-03 10:05:23 -04:00
atmel-mci.c mmc: atmel-mci: AP700x PDC is not connected to MCI 2012-10-03 10:05:23 -04:00
au1xmmc.c MIPS: Alchemy: Au1300 SoC support 2011-12-07 22:02:05 +00:00
bfin_sdh.c mmc: bfin_sdh: Reset SD controller when resume from power saving mode. 2012-09-04 13:58:20 -04:00
cb710-mmc.c mmc: convert drivers/mmc/host/* to use module_platform_driver() 2012-01-11 23:58:42 -05:00
cb710-mmc.h mmc: Driver for CB710/720 memory card reader (MMC part) 2009-06-13 22:42:58 +02:00
davinci_mmc.c mmc: davinci_mmc: convert to DMA engine API 2012-09-19 16:29:44 +08:00
dw_mmc-exynos.c mmc: dw_mmc: add support for exynos specific implementation of dw-mshc 2012-10-03 10:05:20 -04:00
dw_mmc-pci.c mmc: dw_mmc: convert copy of struct device in struct dw_mci to a reference 2012-10-03 10:05:13 -04:00
dw_mmc-pltfm.c mmc: dw_mmc: add support for implementation specific callbacks 2012-10-03 10:05:19 -04:00
dw_mmc-pltfm.h mmc: dw_mmc: add support for implementation specific callbacks 2012-10-03 10:05:19 -04:00
dw_mmc.c mmc: dw_mmc: add support for implementation specific callbacks 2012-10-03 10:05:19 -04:00
dw_mmc.h mmc: dw_mmc: add support for implementation specific callbacks 2012-10-03 10:05:19 -04:00
jz4740_mmc.c mmc: convert drivers/mmc/host/* to use module_platform_driver() 2012-01-11 23:58:42 -05:00
Kconfig mmc: dw_mmc: add support for exynos specific implementation of dw-mshc 2012-10-03 10:05:20 -04:00
Makefile mmc: dw_mmc: add support for exynos specific implementation of dw-mshc 2012-10-03 10:05:20 -04:00
mmc_spi.c mmc: mmc_spi: Use module_spi_driver 2012-09-04 13:58:29 -04:00
mmci.c mmc: mmci: use clk_prepare_enable and clk_disable_unprepare 2012-10-03 10:05:21 -04:00
mmci.h ARM: 7280/1: mmc: mmci: Cache MMCICLOCK and MMCIPOWER register 2012-02-02 17:02:15 +00:00
msm_sdcc.c mmc: remove the second argument of k[un]map_atomic() 2012-01-11 23:58:42 -05:00
msm_sdcc.h mmc: msm_sdcc: Use MCI_INT_MASK0 for PIO interrupts 2011-10-26 15:43:37 -04:00
mvsdio.c ARM: Orion: fix driver probe error handling with respect to clk 2012-07-25 17:06:21 +02:00
mvsdio.h
mxcmmc.c mmc: mxcmmc: fix bug that may block a data transfer forever 2012-10-03 10:05:24 -04:00
mxs-mmc.c mmc: mxs-mmc: fix deadlock caused by recursion loop 2012-09-04 13:58:06 -04:00
of_mmc_spi.c mmc: of_mmc_spi: fix little endian support 2012-02-13 20:38:58 -05:00
omap_hsmmc.c mmc: omap_hsmmc: Pass on the suspend failure to the PM core 2012-10-03 10:05:23 -04:00
omap.c mmc: omap: fix mmc_omap_report_irq to use dev_dbg macros 2012-09-04 13:58:22 -04:00
pxamci.c mmc: pxa-mci: add DT bindings 2012-09-04 13:58:12 -04:00
pxamci.h
s3cmci.c mmc: s3cmci: Convert s3cmci driver to gpiolib API 2012-07-22 15:25:44 -04:00
s3cmci.h s3cmci: DMA fixes 2009-10-01 16:11:15 -07:00
sdhci-cns3xxx.c mmc: convert drivers/mmc/host/* to use module_platform_driver() 2012-01-11 23:58:42 -05:00
sdhci-dove.c mmc: sdhci-dove: DT support for sdhci-dove 2012-09-04 13:58:15 -04:00
sdhci-esdhc-imx.c mmc: esdhc: Fix DMA_MASK to not break mx25 DMA access 2012-07-22 16:42:30 -04:00
sdhci-esdhc.h mmc: sdhci-esdhc: break out early if clock is 0 2012-09-04 13:58:06 -04:00
sdhci-of-esdhc.c mmc: eSDHC: Add ADMA mode support 2012-09-04 13:58:12 -04:00
sdhci-of-hlwd.c mmc: convert drivers/mmc/host/* to use module_platform_driver() 2012-01-11 23:58:42 -05:00
sdhci-pci-data.c mmc: sdhci-pci: add platform data 2012-01-11 23:58:47 -05:00
sdhci-pci.c mmc: sdhci-pci: Use module_pci_driver 2012-09-04 13:58:29 -04:00
sdhci-pltfm.c mmc: dt: Consolidate DT bindings 2012-05-15 13:29:42 +02:00
sdhci-pltfm.h mmc: sdhci: remove "state" argument from sdhci_suspend_host 2011-12-19 15:50:11 -08:00
sdhci-pxav2.c mmc: sdhci-pxav2, sdhci-pxav3: use clk_prepare/unprepare APIs 2012-09-04 13:58:15 -04:00
sdhci-pxav3.c mmc: sdhci-pxav3: dt: Support "cd-gpios" property 2012-09-19 16:29:12 +08:00
sdhci-s3c.c mmc: sdhci-s3c: Add device tree support 2012-10-03 10:05:20 -04:00
sdhci-spear.c Viresh has moved 2012-06-20 14:39:36 -07:00
sdhci-tegra.c mmc: tegra: convert to device tree support only 2012-09-04 13:58:26 -04:00
sdhci.c mmc: sdhci: Test cd-gpio instead of SDHCI presence when probing 2012-09-19 16:29:45 +08:00
sdhci.h mmc: sdhci: if MAX_CURRENT is 0, try getting current from regulator 2012-07-21 00:02:22 -04:00
sdricoh_cs.c mmc: Add module.h to drivers/mmc users assuming implicit presence. 2011-10-26 16:32:19 -04:00
sh_mmcif.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-07-24 17:12:54 -07:00
sh_mobile_sdhi.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-07-24 17:12:54 -07:00
tifm_sd.c Autogenerated GPG tag for Rusty D1ADB8F1: 15EE 8D6C AB0E 7F0C F999 BFCB D920 0E6C D1AD B8F1 2012-01-14 12:32:16 -08:00
tmio_mmc_dma.c Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-03-29 15:34:57 -07:00
tmio_mmc_pio.c mmc: tmio: use generic GPIO CD and WP handlers 2012-07-21 00:02:20 -04:00
tmio_mmc.c mmc: convert drivers/mmc/host/* to use module_platform_driver() 2012-01-11 23:58:42 -05:00
tmio_mmc.h mmc: tmio_mmc: remove unused sdio_irq_enabled flag 2012-03-27 12:20:17 -04:00
ushc.c USB: convert some miscellanies drivers to use module_usb_driver() 2011-11-18 09:52:10 -08:00
via-sdmmc.c mmc: via-sdmmc: Use module_pci_driver 2012-09-04 13:58:30 -04:00
vub300.c mmc: vub300: add missing usb_free_urb 2012-09-04 13:58:16 -04:00
wbsd.c mmc: replace printk with appropriate display macro 2011-10-26 16:32:22 -04:00
wbsd.h