linux/drivers/mmc/host
Lauri Hintsala fc108d24d3 mmc: mxs-mmc: fix deadlock caused by recursion loop
Release the lock before mmc_signal_sdio_irq is called by
mxs_mmc_enable_sdio_irq.

Backtrace:
[   65.470000] =============================================
[   65.470000] [ INFO: possible recursive locking detected ]
[   65.470000] 3.5.0-rc5 #2 Not tainted
[   65.470000] ---------------------------------------------
[   65.470000] ksdioirqd/mmc0/73 is trying to acquire lock:
[   65.470000]  (&(&host->lock)->rlock#2){-.-...}, at: [<bf054120>] mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc]
[   65.470000]
[   65.470000] but task is already holding lock:
[   65.470000]  (&(&host->lock)->rlock#2){-.-...}, at: [<bf054120>] mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc]
[   65.470000]
[   65.470000] other info that might help us debug this:
[   65.470000]  Possible unsafe locking scenario:
[   65.470000]
[   65.470000]        CPU0
[   65.470000]        ----
[   65.470000]   lock(&(&host->lock)->rlock#2);
[   65.470000]   lock(&(&host->lock)->rlock#2);
[   65.470000]
[   65.470000]  *** DEADLOCK ***
[   65.470000]
[   65.470000]  May be due to missing lock nesting notation
[   65.470000]
[   65.470000] 1 lock held by ksdioirqd/mmc0/73:
[   65.470000]  #0:  (&(&host->lock)->rlock#2){-.-...}, at: [<bf054120>] mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc]
[   65.470000]
[   65.470000] stack backtrace:
[   65.470000] [<c0014990>] (unwind_backtrace+0x0/0xf4) from [<c005ccb8>] (__lock_acquire+0x14f8/0x1b98)
[   65.470000] [<c005ccb8>] (__lock_acquire+0x14f8/0x1b98) from [<c005d3f8>] (lock_acquire+0xa0/0x108)
[   65.470000] [<c005d3f8>] (lock_acquire+0xa0/0x108) from [<c02f671c>] (_raw_spin_lock_irqsave+0x48/0x5c)
[   65.470000] [<c02f671c>] (_raw_spin_lock_irqsave+0x48/0x5c) from [<bf054120>] (mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc])
[   65.470000] [<bf054120>] (mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc]) from [<bf0541d0>] (mxs_mmc_enable_sdio_irq+0xc8/0xdc [mxs_mmc])
[   65.470000] [<bf0541d0>] (mxs_mmc_enable_sdio_irq+0xc8/0xdc [mxs_mmc]) from [<c0219b38>] (sdio_irq_thread+0x1bc/0x274)
[   65.470000] [<c0219b38>] (sdio_irq_thread+0x1bc/0x274) from [<c003c324>] (kthread+0x8c/0x98)
[   65.470000] [<c003c324>] (kthread+0x8c/0x98) from [<c00101ac>] (kernel_thread_exit+0x0/0x8)
[   65.470000] BUG: spinlock lockup suspected on CPU#0, ksdioirqd/mmc0/73
[   65.470000]  lock: 0xc3358724, .magic: dead4ead, .owner: ksdioirqd/mmc0/73, .owner_cpu: 0
[   65.470000] [<c0014990>] (unwind_backtrace+0x0/0xf4) from [<c01b46b0>] (do_raw_spin_lock+0x100/0x144)
[   65.470000] [<c01b46b0>] (do_raw_spin_lock+0x100/0x144) from [<c02f6724>] (_raw_spin_lock_irqsave+0x50/0x5c)
[   65.470000] [<c02f6724>] (_raw_spin_lock_irqsave+0x50/0x5c) from [<bf054120>] (mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc])
[   65.470000] [<bf054120>] (mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc]) from [<bf0541d0>] (mxs_mmc_enable_sdio_irq+0xc8/0xdc [mxs_mmc])
[   65.470000] [<bf0541d0>] (mxs_mmc_enable_sdio_irq+0xc8/0xdc [mxs_mmc]) from [<c0219b38>] (sdio_irq_thread+0x1bc/0x274)
[   65.470000] [<c0219b38>] (sdio_irq_thread+0x1bc/0x274) from [<c003c324>] (kthread+0x8c/0x98)
[   65.470000] [<c003c324>] (kthread+0x8c/0x98) from [<c00101ac>] (kernel_thread_exit+0x0/0x8)

Reported-by: Attila Kinali <attila@kinali.ch>
Signed-off-by: Lauri Hintsala <lauri.hintsala@bluegiga.com>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
2012-09-04 13:58:06 -04:00
..
at91_mci.c
at91_mci.h
atmel-mci-regs.h mmc: atmel-mci: fix burst/chunk size modification 2012-06-06 08:52:12 -04:00
atmel-mci.c mmc: atmel-mci: modify CLKDIV displaying in debugfs 2012-07-22 15:25:50 -04:00
au1xmmc.c
bfin_sdh.c mmc: bfin_sdh: fix dma_desc_array build error 2012-09-04 13:58:04 -04:00
cb710-mmc.c
cb710-mmc.h
davinci_mmc.c mmc: davinci_mmc: set MODULE_ALIAS to allow autoloading 2012-04-22 11:16:58 -04:00
dw_mmc-pci.c mmc: Support of PCI mode in the dw_mmc driver 2012-03-25 19:33:44 -04:00
dw_mmc-pltfm.c mmc: Support of PCI mode in the dw_mmc driver 2012-03-25 19:33:44 -04:00
dw_mmc.c mmc: dw_mmc: Fix null dma_ops access when use_dma is false 2012-07-21 00:02:09 -04:00
dw_mmc.h mmc: Support of PCI mode in the dw_mmc driver 2012-03-25 19:33:44 -04:00
jz4740_mmc.c
Kconfig mmc: at91-mci: this driver is now deprecated 2012-05-17 14:33:48 -04:00
Makefile mmc: remove imxmmc driver 2012-04-22 11:17:25 -04:00
mmc_spi.c
mmci.c ARM: 7427/1: mmc: mmci: Defer probe() in case of yet uninitialized GPIOs 2012-06-17 22:24:36 +01:00
mmci.h
msm_sdcc.c
msm_sdcc.h
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: do not depend on grouped clocks 2012-04-25 17:03:38 +02: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
omap_hsmmc.c Merge branch 'dmaengine' of git://git.linaro.org/people/rmk/linux-arm 2012-08-01 16:41:07 -07:00
omap.c mmc: omap: remove private DMA API implementation 2012-07-31 12:06:23 +01:00
pxamci.c
pxamci.h
s3cmci.c mmc: s3cmci: Convert s3cmci driver to gpiolib API 2012-07-22 15:25:44 -04:00
s3cmci.h
sdhci-cns3xxx.c
sdhci-dove.c mmc: sdhci-dove: Prepare for common clock framework 2012-07-22 16:42:48 -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
sdhci-of-esdhc.c mmc: esdhc: Workaround for data crc error on p1010rdb 2012-03-25 19:33:45 -04:00
sdhci-of-hlwd.c
sdhci-pci-data.c
sdhci-pci.c mmc: sdhci-pci: CaFe has broken card detection 2012-07-22 15:25:46 -04:00
sdhci-pltfm.c mmc: dt: Consolidate DT bindings 2012-05-15 13:29:42 +02:00
sdhci-pltfm.h
sdhci-pxav2.c mmc: sdhci-pxa: Add device tree support 2012-07-21 00:01:47 -04:00
sdhci-pxav3.c mmc: sdhci-pxa: Add device tree support 2012-07-21 00:01:47 -04:00
sdhci-s3c.c mmc: sdhci-s3c: pass IRQF ONESHOT to request threaded irq 2012-06-06 09:53:22 -04:00
sdhci-spear.c Viresh has moved 2012-06-20 14:39:36 -07:00
sdhci-tegra.c Merge branch 'for-3.6/common-clk' of git://git.kernel.org/pub/scm/linux/kernel/git/swarren/linux-tegra into next/clk 2012-07-06 22:21:23 +02:00
sdhci.c mmc: sd: Fix sd current limit setting 2012-07-22 15:25:52 -04: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
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
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
tmio_mmc.h mmc: tmio_mmc: remove unused sdio_irq_enabled flag 2012-03-27 12:20:17 -04:00
ushc.c
via-sdmmc.c
vub300.c
wbsd.c
wbsd.h