]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg RegisterCpuFeaturesLib: Fix an ASSERTION issue
authorStar Zeng <star.zeng@intel.com>
Wed, 10 Jul 2019 11:40:05 +0000 (19:40 +0800)
committerStar Zeng <star.zeng@intel.com>
Thu, 11 Jul 2019 09:40:28 +0000 (17:40 +0800)
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1968

We met assertion like below, it happens when there is only
one processor.

ASSERT_EFI_ERROR (Status = Not started)
ASSERT [CpuFeaturesDxe] X:\XXX\XXX\RegisterCpuFeaturesLib\
  DxeRegisterCpuFeaturesLib.c(149): !EFI_ERROR (Status)

The code should not call StartupAllAPs when there is only one processor.

Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Chandana Kumar <chandana.c.kumar@intel.com>
Cc: Kevin Li <kevin.y.li@intel.com>
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c
UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.c
UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.c

index aff7ad600cadaad389e8c2c4708a2f2c26f3fe71..1746f4f07f7be865c5deb31f6b4635808f47a4c8 100644 (file)
@@ -1071,10 +1071,12 @@ CpuFeaturesDetect (
 \r
   CpuInitDataInitialize ();\r
 \r
-  //\r
-  // Wakeup all APs for data collection.\r
-  //\r
-  StartupAPsWorker (CollectProcessorData, NULL);\r
+  if (CpuFeaturesData->NumberOfCpus > 1) {\r
+    //\r
+    // Wakeup all APs for data collection.\r
+    //\r
+    StartupAPsWorker (CollectProcessorData, NULL);\r
+  }\r
 \r
   //\r
   // Collect data on BSP\r
index 9c78a2d993c46fee53cbb4bcc842a21d4dd932b6..ffd99046a6cd5458f9749ab63bf00a95a3638fb1 100644 (file)
@@ -229,31 +229,36 @@ CpuFeaturesInitialize (
   OldBspNumber = GetProcessorIndex (CpuFeaturesData);\r
   CpuFeaturesData->BspNumber = OldBspNumber;\r
 \r
-  Status = gBS->CreateEvent (\r
-                  EVT_NOTIFY_WAIT,\r
-                  TPL_CALLBACK,\r
-                  EfiEventEmptyFunction,\r
-                  NULL,\r
-                  &MpEvent\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
+  if (CpuFeaturesData->NumberOfCpus > 1) {\r
+    Status = gBS->CreateEvent (\r
+                    EVT_NOTIFY_WAIT,\r
+                    TPL_CALLBACK,\r
+                    EfiEventEmptyFunction,\r
+                    NULL,\r
+                    &MpEvent\r
+                    );\r
+    ASSERT_EFI_ERROR (Status);\r
+\r
+    //\r
+    // Wakeup all APs for programming.\r
+    //\r
+    StartupAPsWorker (SetProcessorRegister, MpEvent);\r
+  }\r
 \r
-  //\r
-  // Wakeup all APs for programming.\r
-  //\r
-  StartupAPsWorker (SetProcessorRegister, MpEvent);\r
   //\r
   // Programming BSP\r
   //\r
   SetProcessorRegister (CpuFeaturesData);\r
 \r
-  //\r
-  // Wait all processors to finish the task.\r
-  //\r
-  do {\r
-    Status = gBS->CheckEvent (MpEvent);\r
-  } while (Status == EFI_NOT_READY);\r
-  ASSERT_EFI_ERROR (Status);\r
+  if (CpuFeaturesData->NumberOfCpus > 1) {\r
+    //\r
+    // Wait all processors to finish the task.\r
+    //\r
+    do {\r
+      Status = gBS->CheckEvent (MpEvent);\r
+    } while (Status == EFI_NOT_READY);\r
+    ASSERT_EFI_ERROR (Status);\r
+  }\r
 \r
   //\r
   // Switch to new BSP if required\r
index 2b1553f9b84b25db6aef84b76f2ad1bfdc594745..8ad5a40e5a44021bfad3cd2a5b218a4c88ce1aa9 100644 (file)
@@ -273,10 +273,13 @@ CpuFeaturesInitialize (
   // DXE type instance.\r
   //\r
 \r
-  //\r
-  // Wakeup all APs for programming.\r
-  //\r
-  StartupAPsWorker (SetProcessorRegister, NULL);\r
+  if (CpuFeaturesData->NumberOfCpus > 1) {\r
+    //\r
+    // Wakeup all APs for programming.\r
+    //\r
+    StartupAPsWorker (SetProcessorRegister, NULL);\r
+  }\r
+\r
   //\r
   // Programming BSP\r
   //\r