UefiCpuPkg/MpInitLib: expand comment on initial AP enumeration

Before adding another AP enumeration mode, clarify the documentation on
the current logic. No functional changes.

Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1515
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
Laszlo Ersek 2019-10-10 11:07:39 +02:00
parent a7e2d20193
commit 30459ddde6
1 changed files with 29 additions and 7 deletions
UefiCpuPkg/Library/MpInitLib

View File

@ -1045,14 +1045,36 @@ WakeUpAP (
}
if (CpuMpData->InitFlag == ApInitConfig) {
//
// Here support two methods to collect AP count through adjust
// PcdCpuApInitTimeOutInMicroSeconds values.
// The AP enumeration algorithm below is suitable for two use cases.
//
// one way is set a value to just let the first AP to start the
// initialization, then through the later while loop to wait all Aps
// finsh the initialization.
// The other way is set a value to let all APs finished the initialzation.
// In this case, the later while loop is useless.
// (1) The check-in time for an individual AP is bounded, and APs run
// through their initialization routines strongly concurrently. In
// particular, the number of concurrently running APs
// ("NumApsExecuting") is never expected to fall to zero
// *temporarily* -- it is expected to fall to zero only when all
// APs have checked-in.
//
// In this case, the platform is supposed to set
// PcdCpuApInitTimeOutInMicroSeconds to a low-ish value (just long
// enough for one AP to start initialization). The timeout will be
// reached soon, and remaining APs are collected by watching
// NumApsExecuting fall to zero. If NumApsExecuting falls to zero
// mid-process, while some APs have not completed initialization,
// the behavior is undefined.
//
// (2) The check-in time for an individual AP is unbounded, and/or APs
// may complete their initializations widely spread out. In
// particular, some APs may finish initialization before some APs
// even start.
//
// In this case, the platform is supposed to set
// PcdCpuApInitTimeOutInMicroSeconds to a high-ish value. The AP
// enumeration will always take that long (except when the boot CPU
// count happens to be maximal, that is,
// PcdCpuMaxLogicalProcessorNumber). All APs are expected to
// check-in before the timeout, and NumApsExecuting is assumed zero
// at timeout. APs that miss the time-out may cause undefined
// behavior.
//
TimedWaitForApFinish (
CpuMpData,