From: Gerd Hoffmann Date: Thu, 29 Aug 2024 07:20:29 +0000 (+0200) Subject: OvmfPkg/CpuHotplugSmm: delay SMM exit X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=121af960e2ac152be2c441837595a4c6e2a143f5;p=people%2Faperard%2Fovmf.git OvmfPkg/CpuHotplugSmm: delay SMM exit 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 --- 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; }