riscv: move sbi_init() earlier before jump_label_init()
We call jump_label_init() in setup_arch() is to use static key
mechanism earlier, but riscv jump label relies on the sbi functions,
If we enable static key before sbi_init(), the code path looks like:
static_branch_enable()
..
arch_jump_label_transform()
patch_text_nosync()
flush_icache_range()
flush_icache_all()
sbi_remote_fence_i() for CONFIG_RISCV_SBI case
__sbi_rfence()
Since sbi isn't initialized, so NULL deference! Here is a typical
panic log:
[ 0.000000] Unable to handle kernel NULL pointer dereference at virtual address
0000000000000000
[ 0.000000] Oops [#1]
[ 0.000000] Modules linked in:
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 5.18.0-rc7+ #79
[ 0.000000] Hardware name: riscv-virtio,qemu (DT)
[ 0.000000] epc : 0x0
[ 0.000000] ra : sbi_remote_fence_i+0x1e/0x26
[ 0.000000] epc :
0000000000000000 ra :
ffffffff80005826 sp :
ffffffff80c03d50
[ 0.000000] gp :
ffffffff80ca6178 tp :
ffffffff80c0ad80 t0 :
6200000000000000
[ 0.000000] t1 :
0000000000000000 t2 :
62203a6b746e6972 s0 :
ffffffff80c03d60
[ 0.000000] s1 :
ffffffff80001af6 a0 :
0000000000000000 a1 :
0000000000000000
[ 0.000000] a2 :
0000000000000000 a3 :
0000000000000000 a4 :
0000000000000000
[ 0.000000] a5 :
0000000000000000 a6 :
0000000000000000 a7 :
0000000000080200
[ 0.000000] s2 :
ffffffff808b3e48 s3 :
ffffffff808bf698 s4 :
ffffffff80cb2818
[ 0.000000] s5 :
0000000000000001 s6 :
ffffffff80c9c345 s7 :
ffffffff80895aa0
[ 0.000000] s8 :
0000000000000001 s9 :
000000000000007f s10:
0000000000000000
[ 0.000000] s11:
0000000000000000 t3 :
ffffffff80824d08 t4 :
0000000000000022
[ 0.000000] t5 :
000000000000003d t6 :
0000000000000000
[ 0.000000] status:
0000000000000100 badaddr:
0000000000000000 cause:
000000000000000c
[ 0.000000] ---[ end trace
0000000000000000 ]---
[ 0.000000] Kernel panic - not syncing: Attempted to kill the idle task!
[ 0.000000] ---[ end Kernel panic - not syncing: Attempted to kill the idle task! ]---
Fix this issue by moving sbi_init() earlier before jump_label_init()
Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
Reviewed-by: Anup Patel <anup@brainfault.org>
Reviewed-by: Atish Patra <atishp@rivosinc.com>
Link: https://lore.kernel.org/r/20230515054928.2079268-2-sunilvl@ventanamicro.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>