From b2e458faf8603547bcdf578f465fdf777df44500 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Thu, 29 Aug 2024 09:20:29 +0200 Subject: [PATCH] OvmfPkg/CpuHotplugSmm: delay SMM exit RH-Author: Gerd Hoffmann RH-MergeRequest: 75: OvmfPkg/CpuHotplugSmm: delay SMM exit RH-Jira: RHEL-56154 RH-Acked-by: Oliver Steffen RH-Commit: [1/1] 591189c9b119804cab4c48e9c27e428751993169 (kraxel.rh/centos-src-edk2) Let APs wait until the BSP has completed the register updates to remove the CPU. This makes sure all APs stay in SMM mode until the CPU hot-unplug operation is complete, which in turn makes sure the ACPI lock is released only after the CPU hot-unplug operation is complete. Some background: The CPU hotplug SMI is triggered from an ACPI function which is protected by an ACPI lock. The ACPI function is in the ACPI tables generated by qemu. Signed-off-by: Gerd Hoffmann upstream: submitted (https://github.com/tianocore/edk2/pull/6138) --- OvmfPkg/CpuHotplugSmm/CpuHotplug.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OvmfPkg/CpuHotplugSmm/CpuHotplug.c b/OvmfPkg/CpuHotplugSmm/CpuHotplug.c index d504163026..5af78211d3 100644 --- a/OvmfPkg/CpuHotplugSmm/CpuHotplug.c +++ b/OvmfPkg/CpuHotplugSmm/CpuHotplug.c @@ -355,6 +355,11 @@ EjectCpu ( // QemuSelector = mCpuHotEjectData->QemuSelectorMap[ProcessorNum]; if (QemuSelector == CPU_EJECT_QEMU_SELECTOR_INVALID) { + /* wait until BSP is done */ + while (mCpuHotEjectData->Handler != NULL) { + CpuPause (); + } + return; } -- 2.39.3