From 68d506e0d15c0c412142be68ed006c65b641560f Mon Sep 17 00:00:00 2001 From: Zhiguang Liu Date: Sun, 19 Nov 2023 20:28:48 +0800 Subject: 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 Cc: Rahul Kumar Cc: Gerd Hoffmann Cc: Laszlo Ersek Signed-off-by: Zhiguang Liu --- UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c index 25d058c..b279f5d 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; -- cgit v1.1