mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg RegisterCpuFeaturesLib: Fix an ASSERTION issue
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>
This commit is contained in:
parent
28781fd52a
commit
7a0df266e5
|
@ -1071,10 +1071,12 @@ CpuFeaturesDetect (
|
||||||
|
|
||||||
CpuInitDataInitialize ();
|
CpuInitDataInitialize ();
|
||||||
|
|
||||||
|
if (CpuFeaturesData->NumberOfCpus > 1) {
|
||||||
//
|
//
|
||||||
// Wakeup all APs for data collection.
|
// Wakeup all APs for data collection.
|
||||||
//
|
//
|
||||||
StartupAPsWorker (CollectProcessorData, NULL);
|
StartupAPsWorker (CollectProcessorData, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Collect data on BSP
|
// Collect data on BSP
|
||||||
|
|
|
@ -229,6 +229,7 @@ CpuFeaturesInitialize (
|
||||||
OldBspNumber = GetProcessorIndex (CpuFeaturesData);
|
OldBspNumber = GetProcessorIndex (CpuFeaturesData);
|
||||||
CpuFeaturesData->BspNumber = OldBspNumber;
|
CpuFeaturesData->BspNumber = OldBspNumber;
|
||||||
|
|
||||||
|
if (CpuFeaturesData->NumberOfCpus > 1) {
|
||||||
Status = gBS->CreateEvent (
|
Status = gBS->CreateEvent (
|
||||||
EVT_NOTIFY_WAIT,
|
EVT_NOTIFY_WAIT,
|
||||||
TPL_CALLBACK,
|
TPL_CALLBACK,
|
||||||
|
@ -242,11 +243,14 @@ CpuFeaturesInitialize (
|
||||||
// Wakeup all APs for programming.
|
// Wakeup all APs for programming.
|
||||||
//
|
//
|
||||||
StartupAPsWorker (SetProcessorRegister, MpEvent);
|
StartupAPsWorker (SetProcessorRegister, MpEvent);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Programming BSP
|
// Programming BSP
|
||||||
//
|
//
|
||||||
SetProcessorRegister (CpuFeaturesData);
|
SetProcessorRegister (CpuFeaturesData);
|
||||||
|
|
||||||
|
if (CpuFeaturesData->NumberOfCpus > 1) {
|
||||||
//
|
//
|
||||||
// Wait all processors to finish the task.
|
// Wait all processors to finish the task.
|
||||||
//
|
//
|
||||||
|
@ -254,6 +258,7 @@ CpuFeaturesInitialize (
|
||||||
Status = gBS->CheckEvent (MpEvent);
|
Status = gBS->CheckEvent (MpEvent);
|
||||||
} while (Status == EFI_NOT_READY);
|
} while (Status == EFI_NOT_READY);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Switch to new BSP if required
|
// Switch to new BSP if required
|
||||||
|
|
|
@ -273,10 +273,13 @@ CpuFeaturesInitialize (
|
||||||
// DXE type instance.
|
// DXE type instance.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
if (CpuFeaturesData->NumberOfCpus > 1) {
|
||||||
//
|
//
|
||||||
// Wakeup all APs for programming.
|
// Wakeup all APs for programming.
|
||||||
//
|
//
|
||||||
StartupAPsWorker (SetProcessorRegister, NULL);
|
StartupAPsWorker (SetProcessorRegister, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Programming BSP
|
// Programming BSP
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue