47 lines
1.6 KiB
Diff
47 lines
1.6 KiB
Diff
|
From b2e458faf8603547bcdf578f465fdf777df44500 Mon Sep 17 00:00:00 2001
|
||
|
From: Gerd Hoffmann <kraxel@redhat.com>
|
||
|
Date: Thu, 29 Aug 2024 09:20:29 +0200
|
||
|
Subject: [PATCH] OvmfPkg/CpuHotplugSmm: delay SMM exit
|
||
|
|
||
|
RH-Author: Gerd Hoffmann <None>
|
||
|
RH-MergeRequest: 75: OvmfPkg/CpuHotplugSmm: delay SMM exit
|
||
|
RH-Jira: RHEL-56154
|
||
|
RH-Acked-by: Oliver Steffen <osteffen@redhat.com>
|
||
|
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 <kraxel@redhat.com>
|
||
|
|
||
|
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
|
||
|
|