From 46fc6847832e77f3b1fc1a5c27265874508f2926 Mon Sep 17 00:00:00 2001 From: Marshall Dawson Date: Thu, 25 Oct 2018 13:01:55 -0600 Subject: x86/mp_init: Add configurable stack size for SMM relocate A stack overrun has been observed on AMD64 CPUs during the SMM module relocation process. Change the assumed required size from equaling the save structure's size to a Kconfig symbol. A value of 0x400 doubles the size used by AMD64 systems and maintains the size used by EM64T. BUG=b:118420852 TEST=S3 on Grunt and verify 0x2f000-0x30000 uncorrupted Change-Id: Ib1d590ee4afb06ca649afd6ad253cdfd969ae777 Signed-off-by: Marshall Dawson Reviewed-on: https://review.coreboot.org/29277 Tested-by: build bot (Jenkins) Reviewed-by: Richard Spiegel Reviewed-by: Paul Menzel --- src/cpu/x86/Kconfig | 8 ++++++++ src/cpu/x86/mp_init.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src/cpu/x86') diff --git a/src/cpu/x86/Kconfig b/src/cpu/x86/Kconfig index 5e2d79657e..232fe63f32 100644 --- a/src/cpu/x86/Kconfig +++ b/src/cpu/x86/Kconfig @@ -118,6 +118,14 @@ config SMM_MODULE_STACK_SIZE This option determines the size of the stack within the SMM handler modules. +config SMM_STUB_STACK_SIZE + hex + default 0x400 + depends on SMM_TSEG + help + This option determines the size of the stack within the SMM handler + modules. + config SMM_LAPIC_REMAP_MITIGATION bool default y if NORTHBRIDGE_INTEL_I945 diff --git a/src/cpu/x86/mp_init.c b/src/cpu/x86/mp_init.c index aa2a4695a4..fb3a98691b 100644 --- a/src/cpu/x86/mp_init.c +++ b/src/cpu/x86/mp_init.c @@ -773,7 +773,7 @@ static void adjust_smm_apic_id_map(struct smm_loader_params *smm_params) static int install_relocation_handler(int num_cpus, size_t save_state_size) { struct smm_loader_params smm_params = { - .per_cpu_stack_size = save_state_size, + .per_cpu_stack_size = CONFIG_SMM_STUB_STACK_SIZE, .num_concurrent_stacks = num_cpus, .per_cpu_save_state_size = save_state_size, .num_concurrent_save_states = 1, -- cgit v1.2.3