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:[email protected]]
Sent: Saturday, July 02, 2016 6:42 AM
To: Fan, Jeff
Cc: [email protected]; 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
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel