Re: [GIT pull] irq updates for 4.13

From: Thomas Gleixner
Date: Tue Jul 11 2017 - 05:55:09 EST


On Tue, 11 Jul 2017, Sebastian Reichel wrote:
> There you go (this is basically 9967468c0a10). The referenced
> cpcap is a PMIC, that uses one of OMAP's GPIOs to generate
> interrupts and (among other things) provides an interrupt
> controller.
>
> [ 1.328521] cpcap-core spi1.0: CPCAP vendor: ST rev: 2.10 (1a)
> [ 1.336334] Unhandled fault: imprecise external abort (0x1406) at 0x00000000
> [ 1.343536] pgd = c0004000
> [ 1.346282] [00000000] *pgd=00000000
> [ 1.349914] Internal error: : 1406 [#1] SMP ARM
> [ 1.354492] Modules linked in:
> [ 1.357574] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.12.0-10625-gcb473a1c6f03 #531
> [ 1.365447] Hardware name: Generic OMAP4 (Flattened Device Tree)
> [ 1.371520] task: ee8aae00 task.stack: ee8ac000
> [ 1.376098] PC is at do_raw_spin_unlock+0x58/0x120
> [ 1.380920] LR is at _raw_spin_unlock_irqrestore+0x24/0x44
> [ 1.386444] pc : [<c01a02d8>] lr : [<c0afa6f4>] psr: 60000093
> [ 1.392761] sp : ee8adba0 ip : c10fe40c fp : eea0ac10
> [ 1.398040] r10: eea0ac00 r9 : c061f764 r8 : eea0ad04
> [ 1.403289] r7 : 00000007 r6 : eea07e64 r5 : ffffe000 r4 : eea07e64
> [ 1.409881] r3 : ffffffff r2 : 00000000 r1 : ee8aae00 r0 : eea07e64
> [ 1.416442] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment none
> [ 1.423736] Control: 10c5387d Table: 8000404a DAC: 00000051
> [ 1.429534] Process swapper/0 (pid: 1, stack limit = 0xee8ac218)
> [ 1.435577] Stack: (0xee8adba0 to 0xee8ae000)

> [ 1.728546] [<c01a02d8>] (do_raw_spin_unlock) from [<c0afa6f4>] (_raw_spin_unlock_irqrestore+0x24/0x44)
> [ 1.738037] [<c0afa6f4>] (_raw_spin_unlock_irqrestore) from [<c051ce58>] (omap_gpio_get_direction+0x38/0x44)
> [ 1.747955] [<c051ce58>] (omap_gpio_get_direction) from [<c0515e90>] (gpiochip_lock_as_irq+0x98/0xe4)
> [ 1.757232] [<c0515e90>] (gpiochip_lock_as_irq) from [<c05163c0>] (gpiochip_irq_reqres+0x2c/0x6c)
> [ 1.766174] [<c05163c0>] (gpiochip_irq_reqres) from [<c01ac450>] (__setup_irq+0x478/0x6ec)
> [ 1.774536] [<c01ac450>] (__setup_irq) from [<c01ac81c>] (request_threaded_irq+0xcc/0x14c)

So this crashes in do_raw_spin_unlock_irqrestore() !?! I just have to
wonder how the raw_spin_lock() succeeded. That does not make any sense.

Thanks,

tglx