diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c index 78eeaa6de2..69c53c6228 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -1258,7 +1258,6 @@ WakeUpAP ( AllocateResetVectorBelow1Mb (CpuMpData); AllocateSevEsAPMemory (CpuMpData); FillExchangeInfoData (CpuMpData); - SaveLocalApicTimerSetting (CpuMpData); } if (CpuMpData->ApLoopMode == ApInMwaitLoop) { @@ -2236,6 +2235,7 @@ MpInitLibInitialize ( // Enable the local APIC for Virtual Wire Mode. // ProgramVirtualWireMode (); + SaveLocalApicTimerSetting (CpuMpData); if (FirstMpHandOff == NULL) { if (MaxLogicalProcessorNumber > 1) { @@ -2611,6 +2611,11 @@ SwitchBSPWorker ( ApicBaseMsr.Bits.BSP = 0; AsmWriteMsr64 (MSR_IA32_APIC_BASE, ApicBaseMsr.Uint64); + // + // Save BSP's local APIC timer setting. + // + SaveLocalApicTimerSetting (CpuMpData); + // // Need to wakeUp AP (future BSP). //