android_kernel_asus_sm8350/drivers/mmc/host
Paul Parsons e312eb1e66 mmc: tmio: Fix race condition resulting in spurious interrupts
There is a race condition in the tmio_mmc_irq() interrupt handler,
caused by the presence of a while loop, which results in warnings of
spurious interrupts. This was found on an HP iPAQ hx4700 whose HTC
ASIC3 reportedly incorporates the Toshiba TC6380AF controller.

Towards the end of a multiple read (CMD18) operation the handler clears
the final RXRDY status bit in the first loop iteration, sees the DATAEND
status bit at the bottom of the loop, and so clears the DATAEND status
bit in the second loop iteration. However the DATAEND interrupt is still
queued in the system somewhere and can't be delivered until the handler
has returned. This second interrupt is then reported as spurious in the
next call to the handler. Likewise for single read (CMD17) operations.
And something similar occurs for multiple write (CMD25) and single write
(CMD24) operations, where CMDRESPEND and TXRQ status bits are cleared in
a single call.

In these cases the interrupt handler clears two separate interrupts when
it should only clear the one interrupt for which it was invoked. The fix
is to remove the while loop.

Signed-off-by: Paul Parsons <lost.distance@yahoo.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
2011-07-20 17:21:01 -04:00
..
at91_mci.c mmc: at91_mci: fix multiblock SDIO transfers 2010-12-21 11:46:32 -08:00
atmel-mci-regs.h atmel-mci: add MCI2 register definitions 2009-06-13 22:43:01 +02:00
atmel-mci.c Haavard Skinnemoen has left Atmel 2011-05-18 23:24:50 +02:00
au1xmmc.c tree-wide: fix comment/printk typos 2010-11-01 15:38:34 -04:00
bfin_sdh.c mmc: bfin_sdh: fix alloc size for private data 2011-01-26 00:28:41 -05:00
cb710-mmc.c mmc: cb710: Return err value in cb710_wait_while_busy() 2011-03-15 13:49:42 -04: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: add support for SDIO irq handling 2011-01-09 19:16:18 -05:00
dw_mmc.c mmc: dw_mmc: handle unaligned buffers and sizes 2011-07-20 17:21:00 -04:00
dw_mmc.h mmc: dw_mmc: don't hard code fifo depth, fix usage 2011-07-20 17:20:59 -04:00
imxmmc.c mmc: Remove distinction between hw and phys segments 2010-10-23 21:11:11 +08:00
imxmmc.h imxmmc: use readl/writel 2008-12-16 14:58:17 +01:00
jz4740_mmc.c mmc: jz4740: don't treat NULL clk as an error 2011-01-25 21:53:51 -05:00
Kconfig mmc: host: delete obsolete sdhci-pxa.c 2011-07-20 17:20:51 -04:00
Makefile mmc: tmio: Fix build error without CONFIG_MMC_SDHI 2011-07-20 17:21:00 -04:00
mmc_spi.c Fix common misspellings 2011-03-31 11:26:23 -03:00
mmci.c ARM: 6980/1: mmci: use StartBitErr to detect bad connections 2011-07-06 20:46:04 +01:00
mmci.h ARM: 6980/1: mmci: use StartBitErr to detect bad connections 2011-07-06 20:46:04 +01:00
msm_sdcc.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc 2011-03-18 22:32:40 -07:00
msm_sdcc.h mmc: msm_sdcc: Add gpio handling function to driver 2011-01-21 16:58:00 -08:00
mvsdio.c mmc: Remove distinction between hw and phys segments 2010-10-23 21:11:11 +08:00
mvsdio.h mmc: SDIO driver for Marvell SoCs 2009-03-24 21:30:03 +01:00
mxcmmc.c mmc: mxcmmc: use dmaengine API 2011-03-15 13:49:32 -04:00
mxs-mmc.c mmc: mxs-mmc: add mmc host driver for i.MX23/28 2011-03-15 13:49:37 -04:00
of_mmc_spi.c mmc: of_mmc_spi: add NO_IRQ define to of_mmc_spi.c 2011-06-18 22:18:00 -04:00
omap_hsmmc.c mmc: omap_hsmmc: use original sg_len for dma_unmap_sg 2011-06-25 18:51:28 -04:00
omap.c mmc: omap: Fix possible NULL pointer deref 2011-04-27 19:15:12 -04:00
pxamci.c mmc: Move regulator handling closer to core 2010-10-23 21:11:16 +08:00
pxamci.h [ARM] pxa: mmc: add 1st host controller support for pxa3xx 2008-01-26 15:07:53 +00:00
s3cmci.c Fix common misspellings 2011-03-31 11:26:23 -03:00
s3cmci.h s3cmci: DMA fixes 2009-10-01 16:11:15 -07:00
sdhci-cns3xxx.c mmc: sdhci: change sdhci-pltfm into a module 2011-07-20 17:20:49 -04:00
sdhci-dove.c mmc: sdhci: change sdhci-pltfm into a module 2011-07-20 17:20:49 -04:00
sdhci-esdhc-imx.c mmc: sdhci: change sdhci-pltfm into a module 2011-07-20 17:20:49 -04:00
sdhci-esdhc.h mmc: sdhci-esdhc: remove SDHCI_QUIRK_NO_CARD_NO_RESET from esdhc 2011-03-25 10:30:49 -04:00
sdhci-of-esdhc.c mmc: sdhci: change sdhci-pltfm into a module 2011-07-20 17:20:49 -04:00
sdhci-of-hlwd.c mmc: sdhci: change sdhci-pltfm into a module 2011-07-20 17:20:49 -04:00
sdhci-pci.c mmc: sdhci: Fix read-only detection with JMicron 388 chip 2011-05-24 21:02:42 -04:00
sdhci-pltfm.c mmc: sdhci: change sdhci-pltfm into a module 2011-07-20 17:20:49 -04:00
sdhci-pltfm.h mmc: sdhci: change sdhci-pltfm into a module 2011-07-20 17:20:49 -04:00
sdhci-pxav2.c mmc: sdhci-pxa: move platform data to include/linux/platform_data 2011-07-20 17:20:52 -04:00
sdhci-pxav3.c mmc: sdhci-pxa: move platform data to include/linux/platform_data 2011-07-20 17:20:52 -04:00
sdhci-s3c.c mmc: sdhci-s3c: Auto CMD12 support 2011-03-15 13:48:25 -04:00
sdhci-spear.c drivers: Final irq namespace conversion 2011-03-29 14:48:19 +02:00
sdhci-tegra.c mmc: sdhci: change sdhci-pltfm into a module 2011-07-20 17:20:49 -04:00
sdhci.c mmc: sdhci: Auto-CMD23 fixes. 2011-05-25 16:52:26 -04:00
sdhci.h mmc: sdhci: Auto-CMD23 support. 2011-05-25 16:51:40 -04:00
sdricoh_cs.c pcmcia: Convert pcmcia_device_id declarations to const 2011-05-06 07:46:22 +02:00
sh_mmcif.c mmc: add runtime and system power-management support to the MMCIF driver 2011-05-24 23:53:51 -04:00
sh_mobile_sdhi.c mmc: sdhi: Add write16_hook 2011-07-20 17:20:57 -04:00
tifm_sd.c mmc: Remove distinction between hw and phys segments 2010-10-23 21:11:11 +08:00
tmio_mmc_dma.c mmc: tmio: Share register access functions 2011-07-20 17:20:56 -04:00
tmio_mmc_pio.c mmc: tmio: Fix race condition resulting in spurious interrupts 2011-07-20 17:21:01 -04:00
tmio_mmc.c mmc: Use device platform_data to retrieve tmio_mmc platform bits 2011-05-26 19:44:59 +02:00
tmio_mmc.h mmc: sdhi: Add write16_hook 2011-07-20 17:20:57 -04:00
ushc.c mmc: ushc: Remove duplicate include of usb.h 2011-01-25 21:53:43 -05:00
via-sdmmc.c mmc: use pci_dev->revision 2011-03-25 10:30:49 -04:00
vub300.c mmc: vub300: fix null dereferences in error handling 2011-06-18 22:17:51 -04:00
wbsd.c Fix common misspellings 2011-03-31 11:26:23 -03:00
wbsd.h