aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2014-11-08 11:10:12 +0000
committerSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2014-11-08 11:40:29 +0000
commitab1f818e110e00296ec993b0feb4b019053007d1 (patch)
tree770bf77e53c9111e035f8bec72375d2a4d5afbf0
parent304f7c25d5702a429b89ecd5595870ba8f121f91 (diff)
mmc: mmci: update ops before mmc_of_parse.qcomlt-v3.14-dev
This patch add an additional check in the interrupt handler so that the board does not crash if the ops in null for host drivers which do not setup this. Originally noticed when the card detect raises interrupt immediately afteer installing the interrupt handler. [ 2.269722] Unable to handle kernel NULL pointer dereference at virtual address 0000003c [ 2.269728] pgd = c0204000 [ 2.269746] [0000003c] *pgd=00000000 [ 2.269762] Internal error: Oops: 5 [#1] PREEMPT SMP ARM [ 2.269778] Modules linked in: [ 2.269799] CPU: 3 PID: 60 Comm: irq/314-1218000 Not tainted 3.14.0-00373-g304f7c2-dirty #13 [ 2.269810] task: ed830900 ti: ed842000 task.ti: ed842000 [ 2.269832] PC is at mmc_gpio_cd_irqt+0x20/0x58 [ 2.269842] LR is at mmc_gpio_cd_irqt+0x1c/0x58 [ 2.269857] pc : [<c0614b84>] lr : [<c0614b80>] psr: 60000013 [ 2.269857] sp : ed843f20 ip : 00000015 fp : 00000000 [ 2.269865] r10: c02622bc r9 : c0a50488 r8 : ee385140 [ 2.269874] r7 : ee16d780 r6 : ee16d780 r5 : ee385160 r4 : ee121c00 [ 2.269884] r3 : 00000000 r2 : 00000000 r1 : 00000093 r0 : 0000001a [ 2.269903] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel [ 2.269912] Control: 10c5787d Table: 8020406a DAC: 00000015 [ 2.269921] Process irq/314-1218000 (pid: 60, stack limit = 0xed842240) [ 2.269935] Stack: (0xed843f20 to 0xed844000) [ 2.269953] 3f20: ee385140 c02622d8 ed842000 ee385160 00000001 c0262440 00000000 c026220c [ 2.269970] 3f40: 00000000 00000000 ee385180 ee385140 c026233c 00000000 00000000 00000000 [ 2.269985] 3f60: 00000000 c023f84c 00000000 00000000 00000040 ee385140 00000000 00000000 [ 2.270002] 3f80: ed843f80 ed843f80 00000000 00000000 ed843f90 ed843f90 ed843fac ee385180 [ 2.270023] 3fa0: c023f788 00000000 00000000 c020ef58 00000000 00000000 00000000 00000000 [ 2.270040] 3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 2.270054] 3fe0: 00000000 00000000 00000000 00000000 00000013 00000000 e5cfedbd fbfff5e3 [ 2.270110] [<c0614b84>] (mmc_gpio_cd_irqt) from [<c02622d8>] (irq_thread_fn+0x1c/0x34) [ 2.270142] [<c02622d8>] (irq_thread_fn) from [<c0262440>] (irq_thread+0x104/0x158) [ 2.270176] [<c0262440>] (irq_thread) from [<c023f84c>] (kthread+0xc4/0xe0) [ 2.270215] [<c023f84c>] (kthread) from [<c020ef58>] (ret_from_fork+0x14/0x3c) [ 2.270240] Code: e5941104 e59f0038 eb04f7fe e5943104 (e593303c) [ 2.270285] ---[ end trace 400cc551e97be0d3 ]--- [ 2.270320] Unable to handle kernel paging request at virtual address ffffffec [ 2.270326] pgd = c0204000 [ 2.270351] [ffffffec] *pgd=af7fd821, *pte=00000000, *ppte=00000000 [ 2.270363] Internal error: Oops: 17 [#2] PREEMPT SMP ARM [ 2.270375] Modules linked in: [ 2.270391] CPU: 3 PID: 60 Comm: irq/314-1218000 Tainted: G D 3.14.0-00373-g304f7c2-dirty #13 [ 2.270400] task: ed830900 ti: ed842000 task.ti: ed842000 [ 2.270418] PC is at kthread_data+0x4/0xc [ 2.270434] LR is at irq_thread_dtor+0x28/0xb0 [ 2.270447] pc : [<c023fd50>] lr : [<c0262234>] psr: 20000113 [ 2.270447] sp : ed843cc0 ip : ed843f84 fp : c0614b88 [ 2.270454] r10: c0614b86 r9 : 00000001 r8 : ed842000 [ 2.270462] r7 : ed830900 r6 : c0abd8b0 r5 : 00000000 r4 : ed830900 [ 2.270472] r3 : 00000000 r2 : ed843cc0 r1 : ed843f38 r0 : ed830900 [ 2.270481] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user [ 2.270490] Control: 10c5787d Table: 8020406a DAC: 00000015 [ 2.270498] Process irq/314-1218000 (pid: 60, stack limit = 0xed842240) [ 2.270506] Stack: (0xed843cc0 to 0xed844000) [ 2.270522] 3cc0: c026220c ed830cb8 00000000 c023cdbc 00000031 0000000b c0a545ec ed830900 [ 2.270539] 3ce0: 00000000 c0223534 00000001 00000001 c0614b88 c0752bb0 c08fd580 c0a58378 [ 2.270555] 3d00: ed842000 c0abbb84 c0a545ec ed842000 60000113 0000000b 00000001 c0614b86 [ 2.270571] 3d20: c0614b88 c02129c4 ed842240 0000000b 00000000 ed842000 00000000 00000008 [ 2.270586] 3d40: 65000001 31343935 20343031 66393565 38333030 30626520 66376634 35652065 [ 2.270603] 3d60: 31333439 28203430 33393565 63333033 00002029 c0752bb0 c09891d8 0000003c [ 2.270618] 3d80: 00000005 00000000 ed843ed8 00000000 c0a50488 ed830900 00000000 c0752530 [ 2.270635] 3da0: 0000003c c075b9c4 31323163 00006565 00000000 000003ff 00000000 00000001 [ 2.270650] 3dc0: 00000000 00000001 00000000 00000001 00000100 c0a434b8 2dd9e000 ee7e3d40 [ 2.270667] 3de0: ee045f80 c0765654 ffff8c17 ee121c00 00000000 c0abf219 c0abf219 c096e91d [ 2.270682] 3e00: 00000000 00000008 c0abf219 c049a98c 00000008 00000005 c075bab4 c0a55090 [ 2.270699] 3e20: 0000003c ed843ed8 c0a50488 c02622bc 00000000 c02083b4 c0abf60c 000000be [ 2.270714] 3e40: 00000000 00003b34 0000001a c0abe910 c0a58360 c025e1a4 ffffffff 00000002 [ 2.270730] 3e60: 00000000 00000010 00020000 00000000 00000000 c075986c 00000000 c0759564 [ 2.270745] 3e80: 00000000 c025a320 00000000 00000003 00000000 c0759510 ffffffff c025f768 [ 2.270761] 3ea0: 00000000 00000000 00000000 00000000 c0abf208 0000001a ed843eec c075986c [ 2.270777] 3ec0: c0614b84 60000013 ffffffff ed843f0c ee385140 c075a098 0000001a 00000093 [ 2.270794] 3ee0: 00000000 00000000 ee121c00 ee385160 ee16d780 ee16d780 ee385140 c0a50488 [ 2.270809] 3f00: c02622bc 00000000 00000015 ed843f20 c0614b80 c0614b84 60000013 ffffffff [ 2.270825] 3f20: ee385140 c02622d8 ed842000 ee385160 00000001 c0262440 00000000 c026220c [ 2.270840] 3f40: 00000000 00000000 ee385180 ee385140 c026233c 00000000 00000000 00000000 [ 2.270856] 3f60: 00000000 c023f84c 00000000 00000000 00000040 ee385140 00000000 00000000 [ 2.270872] 3f80: ed843f80 ed843f80 00000001 00010001 ed843f90 ed843f90 ed843fac ee385180 [ 2.270888] 3fa0: c023f788 00000000 00000000 c020ef58 00000000 00000000 00000000 00000000 [ 2.270901] 3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 2.270917] 3fe0: 00000000 00000000 00000000 00000000 00000013 00000000 e5cfedbd fbfff5e3 [ 2.270947] [<c023fd50>] (kthread_data) from [<c0262234>] (irq_thread_dtor+0x28/0xb0) [ 2.270974] [<c0262234>] (irq_thread_dtor) from [<c023cdbc>] (task_work_run+0xa4/0xd8) [ 2.271009] [<c023cdbc>] (task_work_run) from [<c0223534>] (do_exit+0x298/0x8f8) [ 2.271048] [<c0223534>] (do_exit) from [<c02129c4>] (die+0x1f8/0x3c0) [ 2.271087] [<c02129c4>] (die) from [<c0752530>] (__do_kernel_fault.part.8+0x54/0x74) [ 2.271128] [<c0752530>] (__do_kernel_fault.part.8) from [<c075b9c4>] (do_page_fault+0x334/0x424) [ 2.271154] [<c075b9c4>] (do_page_fault) from [<c02083b4>] (do_DataAbort+0x34/0x98) [ 2.271178] [<c02083b4>] (do_DataAbort) from [<c075a098>] (__dabt_svc+0x38/0x60) [ 2.271186] Exception stack(0xed843ed8 to 0xed843f20) [ 2.271196] 3ec0: 0000001a 00000093 [ 2.271213] 3ee0: 00000000 00000000 ee121c00 ee385160 ee16d780 ee16d780 ee385140 c0a50488 [ 2.271229] 3f00: c02622bc 00000000 00000015 ed843f20 c0614b80 c0614b84 60000013 ffffffff [ 2.271254] [<c075a098>] (__dabt_svc) from [<c0614b84>] (mmc_gpio_cd_irqt+0x20/0x58) [ 2.271279] [<c0614b84>] (mmc_gpio_cd_irqt) from [<c02622d8>] (irq_thread_fn+0x1c/0x34) [ 2.271307] [<c02622d8>] (irq_thread_fn) from [<c0262440>] (irq_thread+0x104/0x158) [ 2.271331] [<c0262440>] (irq_thread) from [<c023f84c>] (kthread+0xc4/0xe0) [ 2.271356] [<c023f84c>] (kthread) from [<c020ef58>] (ret_from_fork+0x14/0x3c) [ 2.271372] Code: e513001c e7e00150 e12fff1e e5903244 (e5130014) [ 2.271384] ---[ end trace 400cc551e97be0d4 ]--- Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
-rw-r--r--drivers/mmc/host/mmci.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 97b39d3c47ae..ddd411536f17 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -1541,6 +1541,8 @@ static int mmci_probe(struct amba_device *dev,
if (!mmc)
return -ENOMEM;
+ mmc->ops = &mmci_ops;
+
ret = mmci_of_parse(np, mmc);
if (ret)
goto host_free;
@@ -1645,7 +1647,6 @@ static int mmci_probe(struct amba_device *dev,
mmc->max_discard_to = 0;
}
- mmc->ops = &mmci_ops;
/* We support these PM capabilities. */
mmc->pm_caps |= MMC_PM_KEEP_POWER;