audk/UefiCpuPkg/Library
Ray Ni 030ba3097a UefiCpuPkg/MpInitLib: avoid printing debug messages in AP
MpInitLib contains a function MicrocodeDetect() which is called by
all threads as an AP procedure.
Today this function contains below code:

    if (CurrentRevision != LatestRevision) {
      AcquireSpinLock(&CpuMpData->MpLock);
      DEBUG ((
        EFI_D_ERROR,
        "Updated microcode signature [0x%08x] does not match \
        loaded microcode signature [0x%08x]\n",
        CurrentRevision, LatestRevision
        ));
      ReleaseSpinLock(&CpuMpData->MpLock);
    }

When the if-check is passed, the code may call into PEI services:
1. AcquireSpinLock
   When the PcdSpinTimeout is not 0, TimerLib
   GetPerformanceCounterProperties() is called. And some of the
   TimerLib implementations would get the information cached in
   HOB. But AP procedure cannot call PEI services to retrieve the
   HOB list.

2. DEBUG
   Certain DebugLib relies on ReportStatusCode services and the
   ReportStatusCode PPI is retrieved through the PEI services.
   DebugLibSerialPort should be used.
   But when SerialPortLib is implemented to depend on PEI services,
   even using DebugLibSerialPort can still cause AP calls PEI
   services resulting hang.

It causes a lot of debugging effort on the platform side.

There are 2 options to fix the problem:
1. make sure platform DSC chooses the proper DebugLib and set the
   PcdSpinTimeout to 0. So that AcquireSpinLock and DEBUG don't call
   PEI services.
2. remove the AcquireSpinLock and DEBUG call from the procedure.

Option #2 is preferred because it's not practical to ask every
platform DSC to be written properly.

Following option #2, there are two sub-options:
2.A. Just remove the if-check.
2.B. Capture the CurrentRevision and ExpectedRevision in the memory
     for each AP and print them together from BSP.

The patch follows option 2.B.

Signed-off-by: Ray Ni <ray.ni@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
2021-03-17 12:39:31 +00:00
..
BaseUefiCpuLib UefiCpuPkg: Move StandardSignatureIsAuthenticAMD to BaseUefiCpuLib 2020-07-07 23:25:16 +00:00
BaseXApicLib UefiCpuPkg: Move StandardSignatureIsAuthenticAMD to BaseUefiCpuLib 2020-07-07 23:25:16 +00:00
BaseXApicX2ApicLib UefiCpuPkg: Move StandardSignatureIsAuthenticAMD to BaseUefiCpuLib 2020-07-07 23:25:16 +00:00
CpuCacheInfoLib UefiCpuPkg/CpuCacheInfoLib: Collect cache associative type 2021-03-17 11:27:39 +00:00
CpuCommonFeaturesLib UefiCpuPkg/CpuCommonFeaturesLib: Fix spelling mistake 2020-08-03 16:31:36 +00:00
CpuExceptionHandlerLib UefiCpuPkg/CpuExceptionHandlerLib: Clear CET shadow stack token busy bit 2021-03-02 05:11:55 +00:00
CpuTimerLib UefiCpuPkg: Adding a new TSC library by using CPUID(0x15) TSC leaf 2019-08-21 21:36:56 +08:00
MpInitLib UefiCpuPkg/MpInitLib: avoid printing debug messages in AP 2021-03-17 12:39:31 +00:00
MpInitLibUp UefiCpuPkg/MpInitLibUp: Add MpInitLibStartupAllCPUs API. 2019-07-29 09:25:20 +08:00
MtrrLib UefiCpuPkg/MtrrLibUnitTest: Change to use static array for CI test 2020-08-12 11:38:37 +00:00
PlatformSecLibNull UefiCpuPkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:28 -07:00
RegisterCpuFeaturesLib UefiCpuPkg RegisterCpuFeaturesLib: NumberOfCpus may be uninitialized 2021-01-21 14:30:06 +00:00
SecPeiDxeTimerLibUefiCpu UefiCpuPkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:28 -07:00
SmmCpuFeaturesLib UefiCpuPkg/SmmCpuFeaturesLib: Add Standalone MM support 2021-03-08 18:07:32 +00:00
SmmCpuPlatformHookLibNull UefiCpuPkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:28 -07:00
VmgExitLibNull UefiCpuPkg, OvmfPkg: Disable interrupts when using the GHCB 2020-11-10 19:07:55 +00:00