RISC-V: Enable IPI CPU Backtrace
Add arch_trigger_cpumask_backtrace() which is a generic infrastructure
for sampling other CPUs' backtrace using IPI.
The feature is used when lockups are detected or in case of oops/panic
if parameters are set accordingly.
Below is the case of oops with the oops_all_cpu_backtrace enabled.
$ sysctl kernel.oops_all_cpu_backtrace=1
triggering oops shows:
[ 212.214237] NMI backtrace for cpu 1
[ 212.214390] CPU: 1 PID: 610 Comm: in:imklog Tainted: G OE 6.10.0-rc6 #1
[ 212.214570] Hardware name: riscv-virtio,qemu (DT)
[ 212.214690] epc : fallback_scalar_usercopy+0x8/0xdc
[ 212.214809] ra : _copy_to_user+0x20/0x40
[ 212.214913] epc :
ffffffff80c3a930 ra :
ffffffff8059ba7e sp :
ff20000000eabb50
[ 212.215061] gp :
ffffffff82066f90 tp :
ff6000008e958000 t0 :
3463303866660000
[ 212.215210] t1 :
000000000000005b t2 :
3463303866666666 s0 :
ff20000000eabb60
[ 212.215358] s1 :
0000000000000386 a0 :
00007ff6e81df926 a1 :
ff600000824df800
[ 212.215505] a2 :
000000000000003f a3 :
7fffffffffffffc0 a4 :
0000000000000000
[ 212.215651] a5 :
000000000000003f a6 :
0000000000000000 a7 :
0000000000000000
[ 212.215857] s2 :
ff600000824df800 s3 :
ffffffff82066cc0 s4 :
0000000000001c1a
[ 212.216074] s5 :
ffffffff8206a5a8 s6 :
00007ff6e81df926 s7 :
ffffffff8206a5a0
[ 212.216278] s8 :
ff600000824df800 s9 :
ffffffff81e25de0 s10:
000000000000003f
[ 212.216471] s11:
ffffffff8206a59d t3 :
ff600000824df812 t4 :
ff600000824df812
[ 212.216651] t5 :
ff600000824df818 t6 :
0000000000040000
[ 212.216796] status:
0000000000040120 badaddr:
0000000000000000 cause:
8000000000000001
[ 212.217035] [<
ffffffff80c3a930>] fallback_scalar_usercopy+0x8/0xdc
[ 212.217207] [<
ffffffff80095f56>] syslog_print+0x1f4/0x2b2
[ 212.217362] [<
ffffffff80096e5c>] do_syslog.part.0+0x94/0x2d8
[ 212.217502] [<
ffffffff800979e8>] do_syslog+0x66/0x88
[ 212.217636] [<
ffffffff803a5dda>] kmsg_read+0x44/0x5c
[ 212.217764] [<
ffffffff80392dbe>] proc_reg_read+0x7a/0xa8
[ 212.217952] [<
ffffffff802ff726>] vfs_read+0xb0/0x24e
[ 212.218090] [<
ffffffff803001ba>] ksys_read+0x64/0xe4
[ 212.218264] [<
ffffffff8030025a>] __riscv_sys_read+0x20/0x2c
[ 212.218453] [<
ffffffff80c4af9a>] do_trap_ecall_u+0x60/0x1d4
[ 212.218664] [<
ffffffff80c56998>] ret_from_exception+0x0/0x64
Signed-off-by: Ryo Takakura <takakura@valinux.co.jp>
Link: https://lore.kernel.org/r/20240718093659.158912-1-takakura@valinux.co.jp
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>