Mike,

Parameter - PeiCpuMpData is added for MicrocodeDetect() in this patch.
PeiCpuMpData->MpLock is used to avoid debug message corruption when Aps output 
debug message in parallel mode. 

I don't understand why the patch showed in your mail has not the following part 
of patch. It's maybe the reason of your concern.

diff --git a/UefiCpuPkg/CpuMpPei/Microcode.c b/UefiCpuPkg/CpuMpPei/Microcode.c 
index 8e7f3b0..51a0737 100644
--- a/UefiCpuPkg/CpuMpPei/Microcode.c
+++ b/UefiCpuPkg/CpuMpPei/Microcode.c
@@ -36,10 +36,11 @@ GetCurrentMicrocodeSignature (
 /**
   Detect whether specified processor can find matching microcode patch and 
load it.
 
+  @param PeiCpuMpData        Pointer to PEI CPU MP Data
 **/
 VOID
 MicrocodeDetect (
-  VOID
+  IN PEI_CPU_MP_DATA            *PeiCpuMpData
   )
 {
   UINT64                                  MicrocodePatchAddress;
@@ -187,25 +188,29 @@ MicrocodeDetect (

Thanks!
Jeff
-----Original Message-----
From: Mike Maslenkin [mailto:mike.maslen...@gmail.com] 
Sent: Saturday, July 02, 2016 6:42 AM
To: Fan, Jeff
Cc: edk2-de...@ml01.01.org; Kinney, Michael D; Tian, Feng
Subject: Re: [edk2] [Patch 2/3] UefiCpuPkg/CpuMpPei: Dump message if microcode 
signature not matched

Just curious why locking is required here?
Looks like some operator missed.

On Fri, 2016-07-01 at 15:02 +0800, Jeff Fan wrote:
> diff --git a/UefiCpuPkg/CpuMpPei/Microcode.c 
> b/UefiCpuPkg/CpuMpPei/Microcode.c index 8e7f3b0..51a0737 100644
> --- a/UefiCpuPkg/CpuMpPei/Microcode.c
> +++ b/UefiCpuPkg/CpuMpPei/Microcode.c
> @@ -187,25 +188,29 @@ MicrocodeDetect (
>      MicrocodeEntryPoint = (EFI_CPU_MICROCODE_HEADER *) (((UINTN) 
> MicrocodeEntryPoint) + TotalSize);
>    } while (((UINTN) MicrocodeEntryPoint < MicrocodeEnd));
>  
> -  if (LatestRevision > 0) {
> +  if (LatestRevision > CurrentRevision) {
>      //
>      // BIOS only authenticate updates that contain a numerically larger 
> revision
>      // than the currently loaded revision, where Current Signature < New 
> Update
>      // Revision. A processor with no loaded update is considered to have a
>      // revision equal to zero.
>      //
> -    if (LatestRevision > GetCurrentMicrocodeSignature ()) {
> -      AsmWriteMsr64 (
> -        EFI_MSR_IA32_BIOS_UPDT_TRIG,
> -        (UINT64) (UINTN) MicrocodeInfo.MicrocodeData
> -        );
> -      //
> -      // Get and verify new microcode signature
> -      //
> -      ASSERT (LatestRevision == GetCurrentMicrocodeSignature ());
> -      MicrocodeInfo.Load = TRUE;
> -    } else {
> -      MicrocodeInfo.Load = FALSE;
> +    AsmWriteMsr64 (
> +      EFI_MSR_IA32_BIOS_UPDT_TRIG,
> +      (UINT64) (UINTN) MicrocodeInfo.MicrocodeData
> +      );
> +    //
> +    // Get and check new microcode signature
> +    //
> +    CurrentRevision = GetCurrentMicrocodeSignature ();
> +    if (CurrentRevision != LatestRevision) {
> +      AcquireSpinLock(&PeiCpuMpData->MpLock);
> +      DEBUG ((EFI_D_ERROR, "Updated microcode signature [0x%08x] does not 
> match \
> +                loaded microcode signature [0x%08x]\n", CurrentRevision, 
> LatestRevision));
> +      ReleaseSpinLock(&PeiCpuMpData->MpLock);
>      }
> +    MicrocodeInfo.Load = TRUE;
> +  } else {
> +    MicrocodeInfo.Load = FALSE;
>    }
>  }


_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to