SDIO single IRQ optimization breaks libertas

Daniel Drake dsd at laptop.org
Sun May 29 10:26:03 EDT 2011


Hi,

The following commit in 2.6.39 causes instant death for libertas_sdio
when it receives its first interrupt during initialization:

commit 06e8935febe687e2a561707d4c7ca4245d261dbe
Author: Stefan Nilsson XK <stefan.xk.nilsson at stericsson.com>
Date:   Wed May 11 17:48:05 2011 +0200

    mmc: sdio: optimized SDIO IRQ handling for single irq



[   59.595601] libertas_sdio: Libertas SDIO driver
[   59.600581] libertas_sdio: Copyright Pierre Ossman
[   59.616424] BUG: unable to handle kernel NULL pointer dereference at   (null)
[   59.621371] IP: [<ed010e31>] if_sdio_interrupt+0x34/0x2cf [libertas_sdio]
[   59.621371] *pde = 00000000
[   59.621371] Oops: 0000 [#1] PREEMPT
[   59.621371] Modules linked in: libertas_sdio(+)
[   59.621371]
[   59.621371] Pid: 2102, comm: ksdioirqd/mmc1 Not tainted 2.6.39+ #28
OLPC XO/XO
[   59.621371] EIP: 0060:[<ed010e31>] EFLAGS: 00010246 CPU: 0
[   59.621371] EIP is at if_sdio_interrupt+0x34/0x2cf [libertas_sdio]
[   59.621371] EAX: 0000003a EBX: ea69ff64 ECX: ea69ff64 EDX: 00000005
[   59.621371] ESI: 00000000 EDI: e9afdc00 EBP: ea69ff78 ESP: ea69ff4c
[   59.621371]  DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068
[   59.621371] Process ksdioirqd/mmc1 (pid: 2102, ti=ea69e000
task=ea6c3240 task.ti=ea69e000)
[   59.621371] Stack:
[   59.621371]  ed011489 e9ad7600 00000000 00000000 ea6c3240 00000000
00100100 00200200
[   59.621371]  00000001 e9ad4800 e9afdc00 ea69ffac b0626bca ea6c3240
ea6c3240 00000001
[   59.621371]  ea699dac ea69ffac 7fffffff 00000001 00000000 ea699d98
e9ad4800 b0626b48
[   59.621371] Call Trace:
[   59.621371]  [<b0626bca>] sdio_irq_thread+0x82/0x1ed
[   59.621371]  [<b0626b48>] ? sdio_f0_writeb+0x5a/0x5a
[   59.621371]  [<b0436c40>] kthread+0x66/0x6b
[   59.621371]  [<b0436bda>] ? __init_kthread_worker+0x2d/0x2d
[   59.621371]  [<b06bac76>] kernel_thread_helper+0x6/0x10
[   59.621371] Code: 3e 8d 74 26 00 89 c3 8d 40 04 e8 83 27 5b c3 50
53 68 89 14 01 ed 8d 5d ec 89 45 e8 e8 16 46 6a c3 8b 75 e8 89 d9 ba
05 00 00 00 <8
[   59.621371] EIP: [<ed010e31>] if_sdio_interrupt+0x34/0x2cf
[libertas_sdio] SS:ESP 0068:ea69ff4c
[   59.621371] CR2: 0000000000000000
[   59.777660] ---[ end trace f1b099151b342535 ]---

Any thoughts?

Thanks,
Daniel



More information about the libertas-dev mailing list