summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2021-02-02 18:14:24 +0100
committerPatrick Georgi <pgeorgi@google.com>2021-02-04 09:53:02 +0000
commitcfa02256a5098e8449b4cbc1830990fac75d5fc1 (patch)
tree3abfea603b9c709b898a44b38d8cbd514a3a147a
parent944da4828fefe3ffcb691e55d9c55edef190fabe (diff)
mb/emulation/qemu: Fix SMP boot
Fix booting with SMP enabled, when specifying more CPUs than supported by the code. Change-Id: Ib3d7c1a1a7a8633d4d434ccbd46cf92b0074b724 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/50235 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
-rw-r--r--src/cpu/qemu-x86/Kconfig4
-rw-r--r--src/mainboard/emulation/qemu-i440fx/northbridge.c6
2 files changed, 8 insertions, 2 deletions
diff --git a/src/cpu/qemu-x86/Kconfig b/src/cpu/qemu-x86/Kconfig
index 641cea815c..a22d7f9eab 100644
--- a/src/cpu/qemu-x86/Kconfig
+++ b/src/cpu/qemu-x86/Kconfig
@@ -44,8 +44,8 @@ endchoice
config MAX_CPUS
int
- default 4 if SMM_ASEG
- default 32
+ default 32 if SMM_TSEG
+ default 4
config CPU_QEMU_X86_64
bool "Experimental 64bit support"
diff --git a/src/mainboard/emulation/qemu-i440fx/northbridge.c b/src/mainboard/emulation/qemu-i440fx/northbridge.c
index f49d47dac9..80fba1de07 100644
--- a/src/mainboard/emulation/qemu-i440fx/northbridge.c
+++ b/src/mainboard/emulation/qemu-i440fx/northbridge.c
@@ -271,6 +271,12 @@ static void cpu_bus_scan(struct device *bus)
if (max_cpus < 0)
return;
+ /*
+ * Do not install more CPUs than supported by coreboot.
+ * This will cause a buffer overflow where fixed arrays of CONFIG_MAX_CPUS
+ * are used and might result in a boot failure.
+ */
+ max_cpus = MIN(max_cpus, CONFIG_MAX_CPUS);
/*
* TODO: This only handles the simple "qemu -smp $nr" case