On 2023/02/13 12:12, Lianbo Jiang wrote: > Currently, the "bt" command may print a bogus exception frame > and the remaining frame will be truncated on x86 64 when using the > "virsh send-key <kvm guest> KEY_LEFTALT KEY_SYSRQ KEY_C" command > to trigger a panic from the KVM host. For example: > > crash> bt > PID: 0 TASK: ffff9e7a47e32f00 CPU: 3 COMMAND: "swapper/3" > #0 [ffffba7900118bb8] machine_kexec at ffffffff87e5c2c7 > #1 [ffffba7900118c08] __crash_kexec at ffffffff87f9500d > #2 [ffffba7900118cd0] panic at ffffffff87edfff9 > #3 [ffffba7900118d50] sysrq_handle_crash at ffffffff883ce2c1 > #4 [ffffba7900118d58] __handle_sysrq.cold.15 at ffffffff883ceb56 > #5 [ffffba7900118d88] sysrq_filter at ffffffff883ce9a2 > #6 [ffffba7900118dc0] input_to_handler at ffffffff884fb0bf > #7 [ffffba7900118df8] input_pass_values at ffffffff884fc1b7 > #8 [ffffba7900118e20] input_handle_event at ffffffff884fe278 > #9 [ffffba7900118e50] input_event at ffffffff884fe74b > #10 [ffffba7900118e88] atkbd_interrupt at ffffffff88504e2f > #11 [ffffba7900118ee0] serio_interrupt at ffffffff884f7516 > #12 [ffffba7900118f10] i8042_interrupt at ffffffff884f8b04 > #13 [ffffba7900118f50] __handle_irq_event_percpu at ffffffff87f51430 > #14 [ffffba7900118f90] handle_irq_event_percpu at ffffffff87f51590 > #15 [ffffba7900118fb8] handle_irq_event at ffffffff87f51616 > #16 [ffffba7900118fd8] handle_edge_irq at ffffffff87f559f2 > #17 [ffffba7900118ff0] asm_call_on_stack at ffffffff88800fa2 > --- <IRQ stack> --- > #18 [ffffba790008bda0] asm_call_on_stack at ffffffff88800fa2 > RIP: ffffffffffffffff RSP: 0000000000000124 RFLAGS: 00000003 > RAX: 0000000000000000 RBX: 0000000000000001 RCX: 0000000000000000 > RDX: ffffffff88800c1e RSI: 0000000000000000 RDI: 0000000000000000 > RBP: 0000000000000001 R8: 0000000000000000 R9: 0000000000000000 > R10: 0000000000000000 R11: ffffffff88760555 R12: ffffba790008be08 > R13: ffffffff87f18002 R14: ffff9e7a47e32f00 R15: ffff9e7bb6198e00 > ORIG_RAX: 0000000000000000 CS: 0003 SS: 0000 > bt: WARNING: possibly bogus exception frame > crash> > > The following related kernel commits cause the current issue, crash > needs to adjust the value of irq eframe. > > Related kernel commits: > [1] v5.8: 931b94145981 ("x86/entry: Provide helpers for executing on the irqstack") > [2] v5.8: fa5e5c409213 ("x86/entry: Use idtentry for interrupts") > [3] v5.12: 52d743f3b712 ("x86/softirq: Remove indirection in do_softirq_own_stack()") > > Signed-off-by: Lianbo Jiang <lijiang@xxxxxxxxxx> > Signed-off-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx> > --- > x86_64.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/x86_64.c b/x86_64.c > index 7a5d6f050c89..5b671bd97775 100644 > --- a/x86_64.c > +++ b/x86_64.c > @@ -3938,6 +3938,11 @@ in_exception_stack: > if (irq_eframe) { > bt->flags |= BT_EXCEPTION_FRAME; > i = (irq_eframe - bt->stackbase)/sizeof(ulong); > + if (symbol_exists("asm_common_interrupt")) { > + i -= 1; > + up = (ulong *)(&bt->stackbuf[i*sizeof(ulong)]); > + bt->instptr = *up; > + } > x86_64_print_stack_entry(bt, ofp, level, i, bt->instptr); > bt->flags &= ~(ulonglong)BT_EXCEPTION_FRAME; > cs = x86_64_exception_frame(EFRAME_PRINT|EFRAME_CS, 0, > @@ -6521,6 +6526,14 @@ x86_64_irq_eframe_link_init(void) > else > return; > > + if (symbol_exists("asm_common_interrupt")) { > + if (symbol_exists("asm_call_on_stack")) > + machdep->machspec->irq_eframe_link = -64; > + else > + machdep->machspec->irq_eframe_link = -32; > + return; > + } > + > if (THIS_KERNEL_VERSION < LINUX(2,6,9)) > return; > Thanks for the v2, applied. https://github.com/crash-utility/crash/commit/92de7c34b1f910abff4d77522f74454ea0263a90 Thanks, Kazu -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility Contribution Guidelines: https://github.com/crash-utility/crash/wiki