linux_dsm_epyc7002/drivers/mmc/host
Jarkko Nikula 0e5c93e020 mmc: omap: Fix NULL pointer dereference due uninitialized cover_tasklet
Omap MMC driver initialization can cause a NULL pointer dereference in
tasklet_hi_action on Nokia N810 if its miniSD cover is open during driver
initialization.

[    1.070000] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[    1.080000] pgd = c0004000
[    1.080000] [00000000] *pgd=00000000
[    1.080000] Internal error: Oops: 80000005 [#1] PREEMPT ARM
[    1.080000] Modules linked in:
[    1.080000] CPU: 0 PID: 24 Comm: kworker/0:1 Not tainted 3.13.0-rc2+ #95
[    1.080000] Workqueue: events menelaus_work
[    1.080000] task: c7863340 ti: c7878000 task.ti: c7878000
[    1.080000] PC is at 0x0
[    1.080000] LR is at tasklet_hi_action+0x68/0xa4
...
[    1.080000] [<c003543c>] (tasklet_hi_action+0x68/0xa4) from [<c0034dd0>] (__do_softirq+0xbc/0x208)
[    1.080000] [<c0034dd0>] (__do_softirq+0xbc/0x208) from [<c003521c>] (irq_exit+0x84/0xac)
[    1.080000] [<c003521c>] (irq_exit+0x84/0xac) from [<c00135cc>] (handle_IRQ+0x64/0x84)
[    1.080000] [<c00135cc>] (handle_IRQ+0x64/0x84) from [<c000859c>] (omap2_intc_handle_irq+0x54/0x68)
[    1.080000] [<c000859c>] (omap2_intc_handle_irq+0x54/0x68) from [<c0015be0>] (__irq_svc+0x40/0x74)
[    1.080000] Exception stack(0xc7879d70 to 0xc7879db8)
[    1.080000] 9d60:                                     000003f1 0000000a 00000009 0000001c
[    1.080000] 9d80: c7879e70 c780bc10 c780bc10 00000000 00000001 00008603 c780bc78 c7879e4e
[    1.080000] 9da0: 00000002 c7879db8 c00343b0 c0160c9c 20000113 ffffffff
[    1.080000] [<c0015be0>] (__irq_svc+0x40/0x74) from [<c0160c9c>] (__aeabi_uidiv+0x20/0x9c)
[    1.080000] [<c0160c9c>] (__aeabi_uidiv+0x20/0x9c) from [<c00343b0>] (msecs_to_jiffies+0x18/0x24)
[    1.080000] [<c00343b0>] (msecs_to_jiffies+0x18/0x24) from [<c01ec3ec>] (omap_i2c_xfer+0x30c/0x458)
[    1.080000] [<c01ec3ec>] (omap_i2c_xfer+0x30c/0x458) from [<c01e9724>] (__i2c_transfer+0x3c/0x74)
[    1.080000] [<c01e9724>] (__i2c_transfer+0x3c/0x74) from [<c01eac4c>] (i2c_transfer+0x78/0x94)
[    1.080000] [<c01eac4c>] (i2c_transfer+0x78/0x94) from [<c01eb0bc>] (i2c_smbus_xfer+0x3c0/0x4f8)
[    1.080000] [<c01eb0bc>] (i2c_smbus_xfer+0x3c0/0x4f8) from [<c01eb414>] (i2c_smbus_write_byte_data+0x34/0x3c)
[    1.080000] [<c01eb414>] (i2c_smbus_write_byte_data+0x34/0x3c) from [<c01bb308>] (menelaus_write_reg+0x1c/0x40)
[    1.080000] [<c01bb308>] (menelaus_write_reg+0x1c/0x40) from [<c01bb904>] (menelaus_work+0xa0/0xc4)
[    1.080000] [<c01bb904>] (menelaus_work+0xa0/0xc4) from [<c00439c4>] (process_one_work+0x1fc/0x334)
[    1.080000] [<c00439c4>] (process_one_work+0x1fc/0x334) from [<c0043d6c>] (worker_thread+0x244/0x380)
[    1.080000] [<c0043d6c>] (worker_thread+0x244/0x380) from [<c0049d04>] (kthread+0xc0/0xd4)
[    1.080000] [<c0049d04>] (kthread+0xc0/0xd4) from [<c0012758>] (ret_from_fork+0x14/0x3c)
[    1.080000] Code: bad PC value
[    1.090000] ---[ end trace 7bc2fc7cd14f1d95 ]---
[    1.100000] Kernel panic - not syncing: Fatal exception in interrupt

Reason for this is that omap_notify_cover_event which calls
tasklet_hi_schedule gets called before struct cover_tasklet is initialized.

Call to omap_notify_cover_event on Nokia N810 happens from menelaus.c PMIC
driver via board-n8x0.c during execution of mmc_add_host in case of open
miniSD cover.

Fix this by moving cover_timer and cover_tasklet initialization before
mmc_add_host call in mmc_omap_new_slot.

Signed-off-by: Jarkko Nikula <jarkko.nikula@bitmer.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Chris Ball <chris@printf.net>
2014-02-22 13:16:56 -05:00
..
android-goldfish.c mmc: remove unnecessary platform_set_drvdata() 2013-05-26 14:23:23 -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: add vmmc-supply support 2014-01-13 13:03:40 -05:00
au1xmmc.c mmc: au1xmmc: Move away from using deprecated APIs 2013-10-30 20:26:35 -04:00
bfin_sdh.c mmc: bfin_sdh: Move away from using deprecated APIs 2013-10-30 20:26:36 -04:00
cb710-mmc.c mmc: cb710: Move away from using deprecated APIs 2013-10-30 20:26:37 -04:00
cb710-mmc.h mmc: host: use platform_{get,set}_drvdata() 2013-06-27 11:13:02 -04:00
davinci_mmc.c mmc: davinci_mmc: Move away from using deprecated APIs 2013-10-30 20:26:38 -04:00
dw_mmc-exynos.c mmc: dw_mmc: exynos: Revert the sdr_timing assignment 2013-11-08 14:27:39 -05:00
dw_mmc-k3.c mmc: dw_mmc: k3: remove clk_table 2014-01-17 17:59:17 -05:00
dw_mmc-pci.c mmc: dw_mmc-pci: enable bus-mastering mode 2013-08-25 00:10:12 -04:00
dw_mmc-pltfm.c mmc: dw_mmc: move the platform specific init call 2013-09-25 21:32:40 -04:00
dw_mmc-pltfm.h mmc: remove use of __devexit 2012-11-28 12:28:18 -08:00
dw_mmc-socfpga.c mmc: dw_mmc-socfpga: Staticize dw_mci_socfpga_probe 2013-09-25 21:57:35 -04:00
dw_mmc.c mmc: dw_mmc: fix dw_mci_get_cd 2014-01-17 09:21:38 -05:00
dw_mmc.h mmc: dw_mmc: control card read threshold 2013-09-25 21:34:39 -04:00
jz4740_mmc.c mmc: jz4740: Move away from using deprecated APIs 2013-10-30 20:26:40 -04:00
Kconfig MMC highlights for 3.14: 2014-01-26 11:00:41 -08:00
Makefile mmc: arasan: Add driver for Arasan SDHCI 2014-01-13 12:48:34 -05:00
mmc_spi.c mmc: mmc_spi: Remove platform data .get_cd() and .get_ro() callbacks 2013-08-24 23:58:06 -04:00
mmci.c ARM: 7906/1: mmc: mmci: Remove unnecessary amba_set_drvdata() 2013-12-29 12:32:36 +00:00
mmci.h ARM: 7831/1: mmc: mmci: Adapt to new pinctrl handling 2013-09-19 20:12:23 +01:00
msm_sdcc.c mmc: msm_sdcc: Move away from using deprecated APIs 2013-10-30 20:26:41 -04:00
msm_sdcc.h mmc: msm_sdcc: Use MCI_INT_MASK0 for PIO interrupts 2011-10-26 15:43:37 -04:00
mvsdio.c MMC highlights for 3.13: 2013-11-18 14:47:30 -08:00
mvsdio.h
mxcmmc.c mmc: mxcmmc: Move away from using deprecated APIs 2013-10-30 20:28:26 -04:00
mxs-mmc.c mmc: mxs: use mmc_of_parse to parse devicetree properties 2014-01-13 12:48:21 -05:00
of_mmc_spi.c mmc: mmc_spi: Support CD/RO GPIOs 2013-08-24 23:45:22 -04:00
omap_hsmmc.c mmc: omap: Remove redundant suspend and resume callbacks 2013-10-30 20:28:24 -04:00
omap.c mmc: omap: Fix NULL pointer dereference due uninitialized cover_tasklet 2014-02-22 13:16:56 -05:00
pxamci.c mmc: pxamci: Remove redundant suspend and resume callbacks 2013-10-30 20:28:29 -04:00
pxamci.h
rtsx_pci_sdmmc.c mmc: rtsx: Remove redundant suspend and resume callbacks 2013-10-30 20:28:31 -04:00
s3cmci.c ARM: s3c24xx: explicit dependency on <plat/gpio-cfg.h> 2014-01-14 15:24:54 +01:00
s3cmci.h
sdhci-acpi.c MMC highlights for 3.14: 2014-01-26 11:00:41 -08:00
sdhci-bcm2835.c mmc: sdhci-bcm2835: Use sdhci_pltfm_unregister instead of open coded 2013-09-25 22:05:57 -04:00
sdhci-bcm-kona.c mmc: sdhci-bcm-kona: Use sdhci_pltfm_unregister instead of open coded 2013-09-25 22:05:26 -04:00
sdhci-cns3xxx.c mmc: sdhci: Add size for caller in init+register 2013-05-31 11:59:29 -04:00
sdhci-dove.c mmc: sdhci: Add size for caller in init+register 2013-05-31 11:59:29 -04:00
sdhci-esdhc-imx.c mmc: sdhci-esdhc-imx: fix warning during module remove function 2014-01-13 14:02:39 -05:00
sdhci-esdhc.h mmc: sdhci-esdhc: move common esdhc_set_clock to platform driver 2013-09-26 07:57:12 -04:00
sdhci-of-arasan.c mmc: arasan: Add driver for Arasan SDHCI 2014-01-13 12:48:34 -05:00
sdhci-of-esdhc.c mmc: sdhci-esdhc-imx: set actual_clock in clock setting 2013-09-27 10:31:48 -04:00
sdhci-of-hlwd.c mmc: sdhci: Add size for caller in init+register 2013-05-31 11:59:29 -04:00
sdhci-pci-data.c mmc: sdhci-pci: add platform data 2012-01-11 23:58:47 -05:00
sdhci-pci-o2micro.c mmc: sdhci-pci: add support of O2Micro/BayHubTech SD hosts 2014-01-13 12:48:32 -05:00
sdhci-pci-o2micro.h mmc: sdhci-pci: add support of O2Micro/BayHubTech SD hosts 2014-01-13 12:48:32 -05:00
sdhci-pci.c mmc: sdhci-pci: Fix possibility of chip->fixes being null 2014-01-23 10:52:53 -05:00
sdhci-pci.h mmc: sdhci-pci: Fix BYT sd card getting stuck in runtime suspend 2014-01-20 10:31:08 -05:00
sdhci-pltfm.c mmc: sdhci-pltfm: export pltfm suspend/resume api 2014-01-13 12:48:06 -05:00
sdhci-pltfm.h mmc: sdhci-pltfm: export pltfm suspend/resume api 2014-01-13 12:48:06 -05:00
sdhci-pxav2.c mmc: sdhci: Add size for caller in init+register 2013-05-31 11:59:29 -04:00
sdhci-pxav3.c mmc: slot-gpio: Add debouncing capability to mmc_gpio_request_cd() 2013-08-24 23:45:09 -04:00
sdhci-s3c-regs.h mmc: sdhci-s3c: remove platform dependencies 2013-04-19 13:51:23 +02:00
sdhci-s3c.c mmc: sdhci-s3c: initialize host->quirks2 for using quirks2 2013-08-29 21:19:13 -04:00
sdhci-sirf.c mmc: slot-gpio: Add debouncing capability to mmc_gpio_request_cd() 2013-08-24 23:45:09 -04:00
sdhci-spear.c mmc: remove unnecessary platform_set_drvdata() 2013-05-26 14:23:23 -04:00
sdhci-tegra.c mmc: tegra: add support for Tegra124 2014-01-13 12:48:27 -05:00
sdhci.c mmc: sdhci: Allow for long command timeouts 2014-01-20 09:54:40 -05:00
sdhci.h mmc: sdhci: allow platform access of sdhci_send_command 2013-09-26 07:53:39 -04:00
sdricoh_cs.c mmc: sdricoh_cs: Move away from using deprecated APIs 2013-10-30 20:28:32 -04:00
sh_mmcif.c mmc: sh_mmcif: Fix compilation warning on 64-bit platforms 2014-01-13 12:48:26 -05:00
sh_mobile_sdhi.c mmc: sdhi: update sh_mobile_sdhi_of_data for r8a7791 2014-02-22 13:06:23 -05:00
tifm_sd.c mmc: tifm_sd: Move away from using deprecated APIs 2013-10-30 20:28:23 -04:00
tmio_mmc_dma.c mmc: tmio: bus_shift become tmio_mmc_data member 2014-01-13 12:48:23 -05:00
tmio_mmc_pio.c mmc: tmio: Adapt to proper PM configs for exported functions 2014-02-13 22:58:09 -05:00
tmio_mmc.c mmc: tmio_mmc: Convert from legacy to modern PM ops 2014-02-13 22:58:01 -05:00
tmio_mmc.h mmc: tmio: Adapt to proper PM configs for exported functions 2014-02-13 22:58:09 -05: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: Move away from using deprecated APIs 2013-10-30 20:28:36 -04:00
vub300.c mmc: vub300: Move away from using deprecated APIs 2013-10-30 20:26:43 -04:00
wbsd.c mmc: wbsd: Silence compiler warning 2013-11-08 14:32:03 -05:00
wbsd.h
wmt-sdmmc.c mmc: wmt-sdmmc: Move away from using deprecated APIs 2013-10-30 20:28:27 -04:00