从 kexec 启动 SMP 配置时 Linux 重新启动,不会出现恐慌

从 kexec 启动 SMP 配置时 Linux 重新启动,不会出现恐慌

我正在开发一个涉及 kexec 的项目。我让它在我们的一些硬件平台上运行。在一个平台上,我在 SMP 设置期间突然重新启动且没有紧急转储:

[   25.219028] smpboot: CPU0: AMD EPYC 7402 24-Core Processor (family: 0x17, model: 0x31, stepping: 0x0)
[   25.228083] Performance Events: Fam17h+ core perfctr, AMD PMU driver.
[   25.237997] ... version:                0
[   25.247996] ... bit width:              48
[   25.257996] ... generic registers:      6
[   25.267996] ... value mask:             0000ffffffffffff
[   25.277996] ... max period:             00007fffffffffff
[   25.287996] ... fixed-purpose events:   0
[   25.297996] ... event mask:             000000000000003f
[   25.308059] rcu: Hierarchical SRCU implementation.
[   25.318046] NMI watchdog: Enabled. Permanently consumes one hw-PMU counter.
[   25.328283] smp: Bringing up secondary CPUs ...
[   25.335543] x86: Booting SMP configuration:
��
<fans suddenly get loud, indicating a reboot>

该平台在正常(即非 kexec)情况下可以正常启动。主内核和 kexec 内核是从相同的代码库构建的,但链接方式不同 - 这不太可能与该问题相关,因为我已经在 Intel 平台上对此进行了测试。

Kexec命令行:

[    0.000000] Command line: elfcorehdr=0x86000000 ro panic=5 console=ttyS0,9600 loglevel=8 numifbs=0 nf_conntrack.acct=1 nmi_watchdog=1 profile=0 root=/dev/ram0 initrd=/crashfs.gz libata.force=disable

BIOS - 可能相关,因为一种启动有 BIOS,另一种启动没有 BIOS:

Version 2.20.1275. Copyright (C) 2022 American Megatrends, Inc.
BIOS V1.05(08/26/2022)

我已经追踪到wakeup_secondary_cpu_via_initarch/x86/kernel/smpboot.c。我得到的最后一个输出就在第一个输出之前apic_icr_write

我不知道从哪里开始调试这个。是否可能是 NMI 看门狗强制重新启动,因为唯一可用的核心因某种原因挂起?似乎不太可能,因为挂起的核心无法执行 NMI 检查。

相关内容