> > From: Lukas Auer [mailto:lukas.a...@aisec.fraunhofer.de] > > Sent: Monday, October 21, 2019 2:54 AM > > To: u-boot@lists.denx.de > > Cc: Alistair Francis; Anup Patel; Bin Meng; Atish Patra; Lukas Auer; > > Aurelien > > Jarno; David Abdurachmanov; Rick Jian-Zhi Chen(陳建志) > > Subject: [PATCH] riscv: increase stack size to avoid a stack overflow during > > distro boot > > > > This fixes a problem, where booting Linux using distro boot will sometimes > > lead to an invalid instruction exception on the main hart. The secondary > > harts > > are not affected and boot Linux successfully. The root cause of this > > problem is > > a stack overflow on the main hart. > > > > With distro boot, the current default stack size of 8KiB on RISC-V is not > > sufficient and will cause a stack overflow. The stacks are allocated > > sequentially. > > In the case of a stack overflow the stack of the main hart can reach into > > that of > > another hart and be corrupted. > > > > The stack overflow previously did not cause any problems, because only stack > > frames, which are not used anymore since the hart enters Linux, were > > corrupted. Starting with GCC 9, the stack usage has decreased. Now, only the > > most recent stack frame overflows into the stack of a secondary hart and is > > corrupted. The illegal instruction exception is caused by the secondary hart > > overwriting the return address in the stack frame of the main hart with an > > address that does not include valid code. > > > > Increase the default stack size of each hart to 16KiB to avoid this problem. > > > > Reported-by: Aurelien Jarno <aurel...@aurel32.net> > > Signed-off-by: Lukas Auer <lukas.a...@aisec.fraunhofer.de> > > Tested-by: David Abdurachmanov <david.abdurachma...@sifive.com> > > Tested-by: Aurelien Jarno <aurel...@aurel32.net> > > --- > > > > arch/riscv/Kconfig | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index > > 01975d7c60..85e15ebffa 100644 > > --- a/arch/riscv/Kconfig > > +++ b/arch/riscv/Kconfig > > @@ -224,7 +224,7 @@ config XIP > > > > config STACK_SIZE_SHIFT > > int > > - default 13 > > + default 14 > > > > config SPL_LDSCRIPT > > default "arch/riscv/cpu/u-boot-spl.lds" > > -- > > 2.21.0 >
Reviewed-by: Rick Chen <r...@andestech.com> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot