mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/MpInitLib: Do not wakeup AP if only one processor supported
If MaxLogicalProcessorNumber is only 1, we needn't to wake up APs at all and needn't to register callback functions. It could improve boot performance on single supported system. https://bugzilla.tianocore.org/show_bug.cgi?id=204 Cc: Feng Tian <feng.tian@intel.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Michael Kinney <michael.d.kinney@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan <jeff.fan@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Feng Tian <feng.tian@intel.com>
This commit is contained in:
parent
b028c1021c
commit
14e8137c82
|
@ -290,6 +290,13 @@ InitMpGlobalData (
|
||||||
|
|
||||||
SaveCpuMpData (CpuMpData);
|
SaveCpuMpData (CpuMpData);
|
||||||
|
|
||||||
|
if (CpuMpData->CpuCount == 1) {
|
||||||
|
//
|
||||||
|
// If only BSP exists, return
|
||||||
|
//
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Avoid APs access invalid buff data which allocated by BootServices,
|
// Avoid APs access invalid buff data which allocated by BootServices,
|
||||||
// so we will allocate reserved data for AP loop code.
|
// so we will allocate reserved data for AP loop code.
|
||||||
|
|
|
@ -1143,6 +1143,7 @@ MpInitLibInitialize (
|
||||||
} else {
|
} else {
|
||||||
MaxLogicalProcessorNumber = OldCpuMpData->CpuCount;
|
MaxLogicalProcessorNumber = OldCpuMpData->CpuCount;
|
||||||
}
|
}
|
||||||
|
ASSERT (MaxLogicalProcessorNumber != 0);
|
||||||
|
|
||||||
AsmGetAddressMap (&AddressMap);
|
AsmGetAddressMap (&AddressMap);
|
||||||
ApResetVectorSize = AddressMap.RendezvousFunnelSize + sizeof (MP_CPU_EXCHANGE_INFO);
|
ApResetVectorSize = AddressMap.RendezvousFunnelSize + sizeof (MP_CPU_EXCHANGE_INFO);
|
||||||
|
@ -1209,10 +1210,12 @@ MpInitLibInitialize (
|
||||||
MtrrGetAllMtrrs (&CpuMpData->MtrrTable);
|
MtrrGetAllMtrrs (&CpuMpData->MtrrTable);
|
||||||
|
|
||||||
if (OldCpuMpData == NULL) {
|
if (OldCpuMpData == NULL) {
|
||||||
//
|
if (MaxLogicalProcessorNumber > 1) {
|
||||||
// Wakeup all APs and calculate the processor count in system
|
//
|
||||||
//
|
// Wakeup all APs and calculate the processor count in system
|
||||||
CollectProcessorCount (CpuMpData);
|
//
|
||||||
|
CollectProcessorCount (CpuMpData);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// APs have been wakeup before, just get the CPU Information
|
// APs have been wakeup before, just get the CPU Information
|
||||||
|
@ -1238,19 +1241,21 @@ MpInitLibInitialize (
|
||||||
sizeof (CPU_VOLATILE_REGISTERS)
|
sizeof (CPU_VOLATILE_REGISTERS)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//
|
if (MaxLogicalProcessorNumber > 1) {
|
||||||
// Wakeup APs to do some AP initialize sync
|
//
|
||||||
//
|
// Wakeup APs to do some AP initialize sync
|
||||||
WakeUpAP (CpuMpData, TRUE, 0, ApInitializeSync, CpuMpData);
|
//
|
||||||
//
|
WakeUpAP (CpuMpData, TRUE, 0, ApInitializeSync, CpuMpData);
|
||||||
// Wait for all APs finished initialization
|
//
|
||||||
//
|
// Wait for all APs finished initialization
|
||||||
while (CpuMpData->FinishedCount < (CpuMpData->CpuCount - 1)) {
|
//
|
||||||
CpuPause ();
|
while (CpuMpData->FinishedCount < (CpuMpData->CpuCount - 1)) {
|
||||||
}
|
CpuPause ();
|
||||||
CpuMpData->InitFlag = ApInitDone;
|
}
|
||||||
for (Index = 0; Index < CpuMpData->CpuCount; Index++) {
|
CpuMpData->InitFlag = ApInitDone;
|
||||||
SetApState (&CpuMpData->CpuData[Index], CpuStateIdle);
|
for (Index = 0; Index < CpuMpData->CpuCount; Index++) {
|
||||||
|
SetApState (&CpuMpData->CpuData[Index], CpuStateIdle);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -321,6 +321,14 @@ InitMpGlobalData (
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
SaveCpuMpData (CpuMpData);
|
SaveCpuMpData (CpuMpData);
|
||||||
|
|
||||||
|
if (CpuMpData->CpuCount == 1) {
|
||||||
|
//
|
||||||
|
// If only BSP exists, return
|
||||||
|
//
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Register an event for EndOfPei
|
// Register an event for EndOfPei
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue