summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhiguang Liu <zhiguang.liu@intel.com>2023-11-19 20:28:48 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2023-11-29 07:23:37 +0000
commit68d506e0d15c0c412142be68ed006c65b641560f (patch)
tree9aee5eb81c6911d0111ecb68a0f76480624e356d
parent88580a79d49f923ed9347d6161a5cff28a46f627 (diff)
downloadedk2-68d506e0d15c0c412142be68ed006c65b641560f.tar.gz
edk2-68d506e0d15c0c412142be68ed006c65b641560f.tar.bz2
edk2-68d506e0d15c0c412142be68ed006c65b641560f.zip
UefiCpuPkg/PiSmmCpuDxeSmm: Use NonSmm BSP as default SMM BSP.
Currently, if BSP election is not enabled, will use Core0 as SMM BSP. However, Core0 does not always have the highest performance. So, we can used NonSmm BSP as default BSP. This will take effect in normal SMM init flow and S3 boot flow. In normal SMM flow, the code is executed before first SMI. In S3 flow, the code is executed in Non-SMM BSP's first SMI, where the gSmmCpuPrivate keeps the data from last boot. Reviewed-by: Ray Ni <ray.ni@intel.com> Cc: Rahul Kumar <rahul1.kumar@intel.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com>
-rw-r--r--UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
index 25d058c5b9..b279f5dfcc 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
@@ -1953,6 +1953,16 @@ InitializeMpSyncData (
// Enable BSP election by setting BspIndex to -1
//
mSmmMpSyncData->BspIndex = (UINT32)-1;
+ } else {
+ //
+ // Use NonSMM BSP as SMM BSP
+ //
+ for (CpuIndex = 0; CpuIndex < gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus; CpuIndex++) {
+ if (GetApicId () == gSmmCpuPrivate->ProcessorInfo[CpuIndex].ProcessorId) {
+ mSmmMpSyncData->BspIndex = (UINT32)CpuIndex;
+ break;
+ }
+ }
}
mSmmMpSyncData->EffectiveSyncMode = mCpuSmmSyncMode;