[Crash-utility] [PATCH] Fix x86 initialization for {hard, soft}irq_ctx

Dave Anderson anderson at redhat.com
Thu Feb 16 14:26:23 UTC 2017



----- Original Message -----
> Dave Anderson <anderson at redhat.com> writes:
> 
> > Hi Ogawa,
> 
> Hi,
> 
> > It's been quite some time since I've done any 32-bit x86 maintenance,
> > and any help/time you can afford would be appreciated.
> 
> I've tried some on latest git with i386 linux-v4.9. And the results are
> seems not working yet. I'm not checking the detail of crash failure yet,
> sorry.
> 
> [In latest few commits, using "handle_IRQ" symbol though, at least v4.9
> kernel doesn't have "handle_IRQ". So I changed from "handle_IRQ" to
> "do_IRQ".]

Actually, it supposed to be the function that was running on the process stack
prior to the transition to the IRQ stack.  So it should be "handle_irq" here
in arch/x86/kernel/irq_32.c:

bool handle_irq(struct irq_desc *desc, struct pt_regs *regs)
{
        int overflow = check_stack_overflow();

        if (IS_ERR_OR_NULL(desc))
                return false;

        if (user_mode(regs) || !execute_on_irq_stack(overflow, desc)) {
                if (unlikely(overflow))
                        print_stack_overflow();
                generic_handle_irq_desc(desc);
        }

        return true;
}





> 
> The following is some cases of "kernel stack dump" and "bt".
> 
> crash> log
> [    2.493782] ------------[ cut here ]------------
> [    2.493783] kernel BUG at
> /devel/linux/works/tux3/linux-tux3/drivers/ata/libata-sff.c:1573!
> [    2.493784] invalid opcode: 0000 [#1] PREEMPT SMP
> [    2.493785] Modules linked in:
> [    2.493789] CPU: 3 PID: 45 Comm: kworker/3:1 Not tainted
> 4.9.0-03202-g815a856e470a-dirty #15
> [    2.493789] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
> rel-1.10.1-0-g8891697-prebuilt.qemu-project.org 04/01/2014
> [    2.493799] Workqueue: ata_sff ata_sff_pio_task
> [    2.493800] task: f57d3a00 task.stack: f4cd8000
> [    2.493803] EIP: 0060:[<c172b046>] EFLAGS: 00210002 CPU: 3
> [    2.493804] EIP is at __ata_sff_port_intr+0x146/0x150
> [    2.493805] EAX: f57d3a00 EBX: f3a98000 ECX: 00000041 EDX: 0000c06a
> [    2.493806] ESI: f3a9954c EDI: 00000000 EBP: f56d3f28 ESP: f56d3f14
> [    2.493806]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
> [    2.493807] CR0: 80050033 CR2: ffffffff CR3: 020bb000 CR4: 000006d0
> [    2.493809] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> [    2.493809] DR6: fffe0ff0 DR7: 00000400
> [    2.493809] Stack:
> [    2.493812]  00000000 41000000 f3a98000 f3a9954c 00000000 f56d3f4c
> c172b338 00000000
> [    2.493814]  00000001 00000000 c172b3f7 00001458 00000001 f3fc047c
> f56d3f80 c172b57b
> [    2.493817]  00200086 f3fc047c 00000000 00dcd658 00000001 00000001
> f3a9954c 00000000
> [    2.493817] Call Trace:
> [    2.493820]  <IRQ>
> [    2.493820]  [<c172b338>] ata_bmdma_port_intr+0x28/0xd0
> [    2.493822]  [<c172b3f7>] ? ata_bmdma_interrupt+0x17/0x200
> [    2.493824]  [<c172b57b>] ata_bmdma_interrupt+0x19b/0x200
> [    2.493829]  [<c10cf378>] __handle_irq_event_percpu+0x38/0x470
> [    2.493831]  [<c10cf827>] ? handle_irq_event+0x27/0x50
> [    2.493832]  [<c10cf7ce>] handle_irq_event_percpu+0x1e/0x50
> [    2.493833]  [<c10cf82e>] handle_irq_event+0x2e/0x50
> [    2.493834]  [<c10d295d>] handle_edge_irq+0xad/0x130
> [    2.493835]  [<c10d28b0>] ? handle_level_irq+0x110/0x110
> [    2.493837]  [<c101cfbd>] handle_irq+0x9d/0xd0
> [    2.493838]  <EOI>
> [    2.493841]  <IRQ>
> [    2.493841]  [<c1a0630e>] do_IRQ+0x5e/0x130
> [    2.493842]  [<c1a067b0>] ? __irqentry_text_end+0x3/0x3
> [    2.493844]  [<c1a059b1>] common_interrupt+0x31/0x38
> [    2.493845]  [<c1a067b0>] ? __irqentry_text_end+0x3/0x3
> [    2.493846]  [<c1a06835>] ? __do_softirq+0x85/0x565
> [    2.493848]  [<c1a067b0>] ? __irqentry_text_end+0x3/0x3
> [    2.493849]  [<c101cf12>] do_softirq_own_stack+0x32/0x40
> [    2.493852]  <EOI>
> [    2.493852]  [<c10631d9>] irq_exit+0xa9/0xc0
> [    2.493853]  [<c1a06418>] smp_apic_timer_interrupt+0x38/0x50
> [    2.493853]  [<c1a05c86>] apic_timer_interrupt+0x32/0x38
> [    2.493855]  [<c1a04819>] ? _raw_spin_unlock_irq+0x29/0x50
> [    2.493857]  [<c172ade8>] ata_sff_pio_task+0x78/0x190
> [    2.493858]  [<c1078a37>] process_one_work+0x207/0x700
> [    2.493860]  [<c107899b>] ? process_one_work+0x16b/0x700
> [    2.493861]  [<c1078f71>] worker_thread+0x41/0x470
> [    2.493862]  [<c1078f30>] ? process_one_work+0x700/0x700
> [    2.493864]  [<c107ed46>] kthread+0xa6/0xc0
> [    2.493866]  [<c107eca0>] ? kthread_park+0x50/0x50
> [    2.493867]  [<c107eca0>] ? kthread_park+0x50/0x50
> [    2.493868]  [<c1a05177>] ret_from_fork+0x1b/0x28
> [    2.493889] Code: c0 74 1a 83 8e 80 00 00 00 02 c7 83 20 2d 00 00 04 00 00
> 00 e9 39 ff ff ff 8d 74 26 00 83 83 94 29 00 00 01 31 f6 e9 67 ff ff ff <0f>
> 0b 90 8d b4 26 00 00 00 00 55 89 e5 3e 8d 74 26 00 31 c9 e8
> [    2.493891] EIP: [<c172b046>]
> [    2.493892] __ata_sff_port_intr+0x146/0x150
> [    2.493892]  SS:ESP 0068:f56d3f14
> [    2.493895] ---[ end trace 362d4d3f42fbe108 ]---
> [    2.493896] Kernel panic - not syncing: Fatal exception in interrupt
> [    2.494103] Kernel Offset: disabled
> [    2.509246] ---[ end Kernel panic - not syncing: Fatal exception in
> interrupt
> crash> bt
> PID: 0      TASK: c1da8b00  CPU: 0   COMMAND: "swapper/0"
>  #0 [c1da1f60] __schedule at c19fe305
>  #1 [c1da1fa0] schedule at c19febb3
>  #2 [c1da1fac] schedule_preempt_disabled at c19ff0a2
>  #3 [c1da1fb4] cpu_startup_entry at c10a9580
> crash> bt 45
> PID: 45     TASK: f57d3a00  CPU: 3   COMMAND: "kworker/3:1"
> bt: cannot resolve stack trace:
> bt: Task in user space -- no backtrace
> 
> In above case, looks like failed to detect panic cpu, and "bt 45" also
> not working.
> 
> 
> crash> log
> [    2.406255] ------------[ cut here ]------------
> [    2.406391] kernel BUG at
> /devel/linux/works/tux3/linux-tux3/drivers/ata/libata-sff.c:1573!
> [    2.406565] invalid opcode: 0000 [#1] PREEMPT SMP
> [    2.407285] Modules linked in:
> [    2.407442] CPU: 1 PID: 31 Comm: kworker/1:1 Not tainted
> 4.9.0-03202-g815a856e470a-dirty #15
> [    2.407643] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
> rel-1.10.1-0-g8891697-prebuilt.qemu-project.org 04/01/2014
> [    2.407986] Workqueue: ata_sff ata_sff_pio_task
> [    2.408145] task: f505e080 task.stack: f5060000
> [    2.408296] EIP: 0060:[<c172b046>] EFLAGS: 00210006 CPU: 1
> [    2.408441] EIP is at __ata_sff_port_intr+0x146/0x150
> [    2.408640] EAX: f505e080 EBX: f3da0000 ECX: 00000041 EDX: 0000c06a
> [    2.408865] ESI: f3da154c EDI: 00000000 EBP: f5a73f28 ESP: f5a73f14
> [    2.409077]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
> [    2.409266] CR0: 80050033 CR2: ffffffff CR3: 020bb000 CR4: 000006d0
> [    2.409464] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> [    2.409621] DR6: fffe0ff0 DR7: 00000400
> [    2.409772] Stack:
> [    2.409952]  00000000 41000000 f3da0000 f3da154c 00000000 f5a73f4c
> c172b338 00000000
> [    2.410374]  00000001 00000000 c172b3f7 00001458 00000001 f42b532c
> f5a73f80 c172b57b
> [    2.410775]  00200086 f42b532c 00000000 00dcd658 00000001 00000001
> f3da154c 00000000
> [    2.411140] Call Trace:
> [    2.411252]  <IRQ>
> [    2.411287]  [<c172b338>] ata_bmdma_port_intr+0x28/0xd0
> [    2.411453]  [<c172b3f7>] ? ata_bmdma_interrupt+0x17/0x200
> [    2.411597]  [<c172b57b>] ata_bmdma_interrupt+0x19b/0x200
> [    2.411747]  [<c10cf378>] __handle_irq_event_percpu+0x38/0x470
> [    2.411925]  [<c10cf827>] ? handle_irq_event+0x27/0x50
> [    2.412108]  [<c10cf7ce>] handle_irq_event_percpu+0x1e/0x50
> [    2.412313]  [<c10cf82e>] handle_irq_event+0x2e/0x50
> [    2.412511]  [<c10d295d>] handle_edge_irq+0xad/0x130
> [    2.412713]  [<c10d28b0>] ? handle_level_irq+0x110/0x110
> [    2.413029]  [<c101cfbd>] handle_irq+0x9d/0xd0
> [    2.413196]  <EOI>
> [    2.413237]  [<c1a0630e>] do_IRQ+0x5e/0x130
> [    2.413397]  [<c1a059b1>] common_interrupt+0x31/0x38
> [    2.413536]  [<c1a04819>] ? _raw_spin_unlock_irq+0x29/0x50
> [    2.413691]  [<c172ade8>] ata_sff_pio_task+0x78/0x190
> [    2.413832]  [<c1078a37>] process_one_work+0x207/0x700
> [    2.419333]  [<c107899b>] ? process_one_work+0x16b/0x700
> [    2.419477]  [<c1078f71>] worker_thread+0x41/0x470
> [    2.419615]  [<c1078f30>] ? process_one_work+0x700/0x700
> [    2.419758]  [<c107ed46>] kthread+0xa6/0xc0
> [    2.419887]  [<c107eca0>] ? kthread_park+0x50/0x50
> [    2.420022]  [<c107eca0>] ? kthread_park+0x50/0x50
> [    2.420159]  [<c1a05177>] ret_from_fork+0x1b/0x28
> [    2.420295] Code: c0 74 1a 83 8e 80 00 00 00 02 c7 83 20 2d 00 00 04 00 00
> 00 e9 39 ff ff ff 8d 74 26 00 83 83 94 29 00 00 01 31 f6 e9 67 ff ff ff <0f>
> 0b 90 8d b4 26 00 00 00 00 55 89 e5 3e 8d 74 26 00 31 c9 e8
> [    2.422387] EIP: [<c172b046>]
> [    2.422431] __ata_sff_port_intr+0x146/0x150
> [    2.422585]  SS:ESP 0068:f5a73f14
> [    2.422711] ---[ end trace 8465c4f061d2e6ad ]---
> [    2.422845] Kernel panic - not syncing: Fatal exception in interrupt
> [    2.423137] Kernel Offset: disabled
> [    2.423264] ---[ end Kernel panic - not syncing: Fatal exception in
> interrupt
> crash> bt
> PID: 31     TASK: f505e080  CPU: 1   COMMAND: "kworker/1:1"
>  #0 [f5a73de8] die at c101dc04
>  #1 [f5a73dfc] notify_die at c10809fc
>  #2 [f5a73e24] do_error_trap at c101ab1c
>  #3 [f5a73ec4] do_invalid_op at c101b2cf
>  #4 [f5a73ed4] error_code (via invalid_op) at c1a060fd
>     EAX: f505e080  EBX: f3da0000  ECX: 00000041  EDX: 0000c06a  EBP: f5a73f28
>     DS:  007b      ESI: f3da154c  ES:  007b      EDI: 00000000  GS:  ffffb2b0
>     CS:  0060      EIP: c172b046  ERR: ffffffff  EFLAGS: 00210006
>  #5 [f5a73f08] __ata_sff_port_intr at c172b046
>  #6 [f5a73f2c] ata_bmdma_port_intr at c172b333
>  #7 [f5a73f50] ata_bmdma_interrupt at c172b576
>  #8 [f5a73f84] __handle_irq_event_percpu at c10cf376
>  #9 [f5a73fc0] handle_irq_event_percpu at c10cf7c9
> #10 [f5a73fd4] handle_irq_event at c10cf829
> #11 [f5a73fe8] handle_edge_irq at c10d2958
> --- <hard IRQ> ---
> bt: cannot resolve stack trace:
> bt: text symbols on stack:
> 
> Thanks.
> --
> OGAWA Hirofumi <hirofumi at mail.parknet.co.jp>
> 

OK thanks.  Please send patches as required.

Dave




More information about the Crash-utility mailing list