Commit f40cab8e authored by Samuel Holland's avatar Samuel Holland Committed by Palmer Dabbelt

riscv: Fix SMP when shadow call stacks are enabled

This fixes two bugs in SCS initialization for secondary CPUs. First,
the SCS was not initialized at all in the spinwait boot path. Second,
the code for the SBI HSM path attempted to initialize the SCS before
enabling the MMU. However, that involves dereferencing the thread
pointer, which requires the MMU to be enabled.

Fix both issues by setting up the SCS in the common secondary entry
path, after enabling the MMU.

Fixes: d1584d79 ("riscv: Implement Shadow Call Stack")
Signed-off-by: default avatarSamuel Holland <samuel.holland@sifive.com>
Reviewed-by: default avatarSami Tolvanen <samitolvanen@google.com>
Link: https://lore.kernel.org/r/20231121211958.3158576-1-samuel.holland@sifive.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
parent 96ba4a47
...@@ -154,7 +154,6 @@ secondary_start_sbi: ...@@ -154,7 +154,6 @@ secondary_start_sbi:
XIP_FIXUP_OFFSET a3 XIP_FIXUP_OFFSET a3
add a3, a3, a1 add a3, a3, a1
REG_L sp, (a3) REG_L sp, (a3)
scs_load_current
.Lsecondary_start_common: .Lsecondary_start_common:
...@@ -165,6 +164,7 @@ secondary_start_sbi: ...@@ -165,6 +164,7 @@ secondary_start_sbi:
call relocate_enable_mmu call relocate_enable_mmu
#endif #endif
call .Lsetup_trap_vector call .Lsetup_trap_vector
scs_load_current
tail smp_callin tail smp_callin
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment