6e1987f UefiCpuPkg/MpInitLib: wait no longer than necessary for initial AP startup

Authored and Committed by lersek 7 years ago
    UefiCpuPkg/MpInitLib: wait no longer than necessary for initial AP startup
    
    Sometimes a platform knows exactly how many CPUs it has at boot. It should
    be able to
    - set PcdCpuMaxLogicalProcessorNumber dynamically to this number,
    - set PcdCpuApInitTimeOutInMicroSeconds to a very long time (for example
      MAX_UINT32, approx. 71 minutes),
    - and expect that MpInitLib wait exactly as long as necessary for all APs
      to report in.
    
    Other platforms should be able to continue setting a reasonably large
    upper bound on supported CPUs, and waiting for a reasonable, fixed amount
    of time for all APs to report in.
    
    Add this functionality. The TimedWaitForApFinish() function will return
    when all APs have reported in, or the timeout has expired -- whichever
    happens first.
    
    (Accessing these PCDs dynamically is safe. The PEI and DXE phase instances
    of this library are restricted to PEIM and DXE_DRIVER client modules, thus
    the PCD accesses cannot be linked into runtime code.)
    
    Cc: Igor Mammedov <imammedo@redhat.com>
    Cc: Jeff Fan <jeff.fan@intel.com>
    Cc: Jordan Justen <jordan.l.justen@intel.com>
    Cc: Michael Kinney <michael.d.kinney@intel.com>
    Bugzilla: https://bugzilla.tianocore.org/show_bug.cgi?id=116
    Contributed-under: TianoCore Contribution Agreement 1.0
    Signed-off-by: Laszlo Ersek <lersek@redhat.com>
    Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
    Reviewed-by: Jeff Fan <jeff.fan@intel.com>