diff --git a/src/arch/arm/Kconfig b/src/arch/arm/Kconfig index 2499d2d075..6bef91ce77 100644 --- a/src/arch/arm/Kconfig +++ b/src/arch/arm/Kconfig @@ -31,3 +31,8 @@ config ARM_BOOTBLOCK_CUSTOM config ARM_LPAE bool default n + +# Mark SMP stack size as 0 since we keep using SRAM stack throughout ramstage. +config STACK_SIZE + hex + default 0x0 diff --git a/src/arch/mips/Kconfig b/src/arch/mips/Kconfig index 10349f2d1b..71e5dc84eb 100644 --- a/src/arch/mips/Kconfig +++ b/src/arch/mips/Kconfig @@ -39,3 +39,8 @@ config ARCH_ROMSTAGE_MIPS config ARCH_RAMSTAGE_MIPS bool default n + +# Mark SMP stack size as 0 since we keep using SRAM stack throughout ramstage. +config STACK_SIZE + hex + default 0x0 diff --git a/src/lib/stack.c b/src/lib/stack.c index 05e797510a..52dd723e38 100644 --- a/src/lib/stack.c +++ b/src/lib/stack.c @@ -20,31 +20,35 @@ it with the version available from LANL. * rminnich@lanl.gov */ +#include #include #include +#include int checkstack(void *top_of_stack, int core) { + /* Not all archs use CONFIG_STACK_SIZE, those who don't set it to 0. */ + size_t stack_size = CONFIG_STACK_SIZE ? CONFIG_STACK_SIZE : _stack_size; int i; - u32 *stack = (u32 *) (top_of_stack - CONFIG_STACK_SIZE); + u32 *stack = (u32 *) (top_of_stack - stack_size); if (stack[0] != 0xDEADBEEF){ printk(BIOS_ERR, "Stack overrun on CPU%d. " - "Increase stack from current %d bytes\n", - core, CONFIG_STACK_SIZE); + "Increase stack from current %zu bytes\n", + core, stack_size); + BUG(); return -1; } - for(i = 1; i < CONFIG_STACK_SIZE/sizeof(stack[0]); i++){ + for(i = 1; i < stack_size/sizeof(stack[0]); i++){ if (stack[i] == 0xDEADBEEF) continue; printk(BIOS_SPEW, "CPU%d: stack: %p - %p, ", - core, stack, - &stack[CONFIG_STACK_SIZE/sizeof(stack[0])]); + core, stack, &stack[stack_size/sizeof(stack[0])]); printk(BIOS_SPEW, "lowest used address %p, ", &stack[i]); printk(BIOS_SPEW, "stack used: %ld bytes\n", - (unsigned long)&stack[CONFIG_STACK_SIZE / - sizeof(stack[0])] - (unsigned long)&stack[i]); + (unsigned long)&stack[stack_size / sizeof(stack[0])] + - (unsigned long)&stack[i]); return 0; }