arch/riscv: disable excess harts before picking main boot hart

Harts with id greater than or equal to CONFIG_NR_CPUS need to be
disabled.  But the kernel can pick any hart as the main hart.  So,
before picking the main hart, the kernel must disable harts with ids
greater than or equal to CONFIG_NR_CPUS.

Signed-off-by: Xiang Wang <merle@hardenedlinux.org>
Reviewed-by: Palmer Dabbelt <palmer@sifive.com>
Reviewed-by: Anup Patel <anup.patel@wdc.com>
[paul.walmsley@sifive.com: updated to apply; cleaned up patch
 description]
Signed-off-by: Paul Walmsley <paul.walmsley@sifive.com>
This commit is contained in:
Xiang Wang 2019-09-06 11:56:09 +08:00 committed by Paul Walmsley
parent 1cec0ce2e9
commit b47613da3b

View File

@ -63,6 +63,11 @@ _start_kernel:
li t0, SR_FS li t0, SR_FS
csrc CSR_SSTATUS, t0 csrc CSR_SSTATUS, t0
#ifdef CONFIG_SMP
li t0, CONFIG_NR_CPUS
bgeu a0, t0, .Lsecondary_park
#endif
/* Pick one hart to run the main boot sequence */ /* Pick one hart to run the main boot sequence */
la a3, hart_lottery la a3, hart_lottery
li a2, 1 li a2, 1
@ -154,9 +159,6 @@ relocate:
.Lsecondary_start: .Lsecondary_start:
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
li a1, CONFIG_NR_CPUS
bgeu a0, a1, .Lsecondary_park
/* Set trap vector to spin forever to help debug */ /* Set trap vector to spin forever to help debug */
la a3, .Lsecondary_park la a3, .Lsecondary_park
csrw CSR_STVEC, a3 csrw CSR_STVEC, a3