]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg/MpInitLib: Avoid ApInitReconfig in PEI.
authorDong, Eric <eric.dong@intel.com>
Fri, 24 Apr 2020 08:47:16 +0000 (16:47 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Thu, 30 Apr 2020 04:11:13 +0000 (04:11 +0000)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2683

In PEI phase, AP already been waked up through ApInitConfig,
so it can directly wake up it through change wakup buffer
instead of use ApInitReconfig flag. It can save some time.

Change code to only use ApInitReconfig flag in DXE phase
which must need to update the wake up buffer.

Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
Cc: Chandana Kumar <chandana.c.kumar@intel.com>
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
UefiCpuPkg/Library/MpInitLib/MpLib.c

index ada3969b683c5e5ad5acabe5946d796b16a4d2dd..cbc5594c786a82ad68627e1bf54b137775f9d13a 100644 (file)
@@ -1820,7 +1820,14 @@ MpInitLibInitialize (
   // Wakeup APs to do some AP initialize sync (Microcode & MTRR)\r
   //\r
   if (CpuMpData->CpuCount > 1) {\r
-    CpuMpData->InitFlag = ApInitReconfig;\r
+    if (OldCpuMpData != NULL) {\r
+      //\r
+      // Only needs to use this flag for DXE phase to update the wake up\r
+      // buffer. Wakeup buffer allocated in PEI phase is no longer valid\r
+      // in DXE.\r
+      //\r
+      CpuMpData->InitFlag = ApInitReconfig;\r
+    }\r
     WakeUpAP (CpuMpData, TRUE, 0, ApInitializeSync, CpuMpData, TRUE);\r
     //\r
     // Wait for all APs finished initialization\r
@@ -1828,7 +1835,9 @@ MpInitLibInitialize (
     while (CpuMpData->FinishedCount < (CpuMpData->CpuCount - 1)) {\r
       CpuPause ();\r
     }\r
-    CpuMpData->InitFlag = ApInitDone;\r
+    if (OldCpuMpData != NULL) {\r
+      CpuMpData->InitFlag = ApInitDone;\r
+    }\r
     for (Index = 0; Index < CpuMpData->CpuCount; Index++) {\r
       SetApState (&CpuMpData->CpuData[Index], CpuStateIdle);\r
     }\r