Hi Marvin With your comments: 1. According to granular of prototype (EFI_STATUS). 2. will delete assert and return status 3. Will delete assert and return first error(if so). Other modification: 1. SmmCpuRendezvousLib.inf: add MM_STANDALONE support 2. SmmCpuRendezvousLib.c: remove *constructor function, move its action into SmmWaitForAllProcessor function.
> -----Original Message----- > From: Marvin Häuser <mhaeu...@posteo.de> > Sent: Friday, February 11, 2022 6:30 PM > To: devel@edk2.groups.io; Li, Zhihao <zhihao...@intel.com> > Cc: Dong, Eric <eric.d...@intel.com>; Ni, Ray <ray...@intel.com>; Kumar, > Rahul1 <rahul1.ku...@intel.com> > Subject: Re: [edk2-devel] [PATCH v1 1/2] UefiCpuPkg: Extend SMM CPU > Service with rendezvous support. > > Good day, > > On 08.02.22 06:35, Li, Zhihao wrote: > > From: Zhihao Li <zhihao...@intel.com> > > > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3815 > > > > This patch extends the SMM CPU Service protocol with new interface > > SmmWaitForAllProcessor(), which can be used by SMI handler to > > optionally wait for other APs to complete SMM rendezvous in relaxed AP > mode. > > > > A new library SmmCpuRendezvousLib is provided to abstract the service > > into library API to simple SMI handler code. > > > > Cc: Eric Dong <eric.d...@intel.com> > > Cc: Ray Ni <ray...@intel.com> > > Cc: Rahul Kumar <rahul1.ku...@intel.com> > > > > Signed-off-by: Zhihao Li <zhihao...@intel.com> > > --- > > UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c | > 109 ++++++++++++++++++++ > > UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c | 65 > ++++++++++++ > > UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c | 14 ++- > > UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c | 2 +- > > UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h | 27 +++++ > > UefiCpuPkg/Include/Protocol/SmmCpuService.h | 40 > > +++++++ > > UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf > | 32 ++++++ > > UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h | 28 > +++++ > > UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf | 3 +- > > UefiCpuPkg/UefiCpuPkg.dec | 5 +- > > 10 files changed, 318 insertions(+), 7 deletions(-) > > > > diff --git > > a/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c > > b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c > > new file mode 100644 > > index 0000000000..3c5cd51d0c > > --- /dev/null > > +++ > b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c > > @@ -0,0 +1,109 @@ > > +/** @file > > > > +SMM CPU Rendezvous library header file. > > > > + > > > > +Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> > > > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > > > + > > > > +**/ > > > > + > > > > + > > > > +#include <Base.h> > > > > +#include <Uefi.h> > > > > +#include <Library/BaseLib.h> > > > > +#include <Library/DebugLib.h> > > > > +#include <Library/PcdLib.h> > > > > +#include <Library/SmmServicesTableLib.h> > > > > +#include <Protocol/SmmCpuService.h> > > > > +#include <Library/SmmCpuRendezvousLib.h> > > > > + > > > > +STATIC EDKII_SMM_CPU_SERVICE_PROTOCOL *mSmmCpuService = > NULL; > > > > + > > > > +/** > > > > + This routine wait for all AP processors to arrive in SMM. > > > > + > > > > + @param BlockingMode Blocking mode or non-blocking mode. > > > > + > > > > + @retval TRUE All processors checked in to SMM > > > > + @retval FALSE Some processor not checked in to SMM > > > > + > > > > +**/ > > > > +EFI_STATUS > > > > +EFIAPI > > > > +SmmWaitForAllProcessor ( > > > > + IN BOOLEAN BlockingMode > > > > + ) > > > > +{ > > > > + EFI_STATUS Status; > > > > + > > > > + if (mSmmCpuService == NULL) { > > > > + return TRUE; > > > > + } > > > > + > > > > + Status = mSmmCpuService->WaitForAllProcessor ( > > > > + mSmmCpuService, > > > > + BlockingMode > > > > + ); > > > > + return EFI_ERROR(Status) ? FALSE : TRUE; > > Hmm, if there is a granular error code, why make it less granular by > conversion? Also the prototype says EFI_STATUS, and the docs say BOOLEAN. According to granular of prototype (EFI_STATUS). > > > > > +} > > > > + > > > > +/** > > > > + Register status code callback function only when Report Status Code > > + protocol > > > > + is installed. > > > > + > > > > + @param Protocol Points to the protocol's unique identifier. > > > > + @param Interface Points to the interface instance. > > > > + @param Handle The handle on which the interface was installed. > > > > + > > > > + @retval EFI_SUCCESS Notification runs successfully. > > > > + > > > > +**/ > > > > +EFI_STATUS > > > > +EFIAPI > > > > +SmmCpuServiceProtocolNotify ( > > > > + IN CONST EFI_GUID *Protocol, > > > > + IN VOID *Interface, > > > > + IN EFI_HANDLE Handle > > > > + ) > > > > +{ > > > > + EFI_STATUS Status; > > > > + > > > > + Status = gSmst->SmmLocateProtocol ( > > > > + &gEdkiiSmmCpuServiceProtocolGuid, > > > > + NULL, > > > > + (VOID **) &mSmmCpuService > > > > + ); > > > > + ASSERT_EFI_ERROR (Status); > > > > + > > > > + return EFI_SUCCESS; > > > > +} > > > > + > > > > +/** > > > > + The constructor function > > > > + > > > > + @param[in] ImageHandle The firmware allocated handle for the EFI > image. > > > > + @param[in] SystemTable A pointer to the EFI System Table. > > > > + > > > > + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. > > > > + > > > > +**/ > > > > +EFI_STATUS > > > > +EFIAPI > > > > +SmmCpuRendezvousLibConstructor ( > > > > + IN EFI_HANDLE ImageHandle, > > > > + IN EFI_SYSTEM_TABLE *SystemTable > > > > + ) > > > > +{ > > > > + EFI_STATUS Status; > > > > + VOID *Registration; > > > > + > > > > + Status = gSmst->SmmLocateProtocol > > + (&gEdkiiSmmCpuServiceProtocolGuid, NULL, (VOID **) > &mSmmCpuService); > > > > + if (EFI_ERROR (Status)) { > > > > + Status = gSmst->SmmRegisterProtocolNotify ( > > > > + &gEdkiiSmmCpuServiceProtocolGuid, > > > > + SmmCpuServiceProtocolNotify, > > > > + &Registration > > > > + ); > > > > + ASSERT_EFI_ERROR (Status); > > This might as well fail, why ASSERT? This would be a good candidate for the > upcoming panic API I guess. :) :( will delete assert and return status > > > > > + } > > > > + return EFI_SUCCESS; > > > > +} > > \ No newline at end of file > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c > > b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c > > index 5d624f8e9e..34019c24ff 100644 > > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c > > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c > > @@ -20,6 +20,19 @@ EFI_SMM_CPU_SERVICE_PROTOCOL > mSmmCpuService = { > > SmmRegisterExceptionHandler > > > > }; > > > > > > > > +// > > > > +// EDKII SMM CPU Service Protocol instance > > > > +// > > > > +EDKII_SMM_CPU_SERVICE_PROTOCOL mEdkiiSmmCpuService = { > > > > + SmmGetProcessorInfo, > > > > + SmmSwitchBsp, > > > > + SmmAddProcessor, > > > > + SmmRemoveProcessor, > > > > + SmmWhoAmI, > > > > + SmmRegisterExceptionHandler, > > > > + SmmWaitForAllProcessor > > > > +}; > > > > + > > > > /** > > > > Gets processor information on the requested processor at the instant > this call is made. > > > > > > > > @@ -365,5 +378,57 @@ InitializeSmmCpuServices ( > > &mSmmCpuService > > > > ); > > > > ASSERT_EFI_ERROR (Status); > > > > + > > > > + Status = gSmst->SmmInstallProtocolInterface ( > > > > + &Handle, > > > > + &gEdkiiSmmCpuServiceProtocolGuid, > > > > + EFI_NATIVE_INTERFACE, > > > > + &mEdkiiSmmCpuService > > > > + ); > > > > + ASSERT_EFI_ERROR (Status); > > > > + return Status; > > Status is actually returned here, so the previous status return is discarded > entirely, and only the inserted code's status can ever be returned. This is an > unobvious side-effect of this commit that is not documented (and is in > general a disease that comes from the abuse of ASSERTs throughout edk2). Will delete assert and return first error(if so). > > Best regards, > Marvin > > > > > +} > > > > + > > > > +/** > > > > + Wait for all processors enterring SMM until all CPUs are already > synchronized or not. > > > > + > > > > + @param This A pointer to the > EDKII_SMM_CPU_SERVICE_PROTOCOL instance. > > > > + @param BlockingMode Blocking mode or non-blocking mode. > > > > + > > > > + @retval EFI_SUCCESS All avaiable APs arrived. > > > > + @retval EFI_TIMEOUT Wait for all APs until timeout. > > > > +**/ > > > > +EFI_STATUS > > > > +EFIAPI > > > > +SmmWaitForAllProcessor ( > > > > + IN EDKII_SMM_CPU_SERVICE_PROTOCOL *This, > > > > + IN BOOLEAN BlockingMode > > > > + ) > > > > +{ > > > > + EFI_STATUS Status; > > > > + > > > > + // > > > > + // Return success immediately if all CPUs are already synchronized. > > > > + // > > > > + if (mSmmMpSyncData->AllApArrivedWithException) { > > > > + Status = EFI_SUCCESS; > > > > + goto ON_EXIT; > > > > + } > > > > + > > > > + if (!BlockingMode) { > > > > + Status = EFI_TIMEOUT; > > > > + goto ON_EXIT; > > > > + } > > > > + > > > > + // > > > > + // There are some APs outside SMM, Wait for all avaiable APs to arrive. > > > > + // > > > > + SmmWaitForApArrival (BlockingMode); > > > > + Status = mSmmMpSyncData->AllApArrivedWithException ? > EFI_SUCCESS : > > + EFI_TIMEOUT; > > > > + > > > > +ON_EXIT: > > > > + if (!mSmmMpSyncData->AllApArrivedWithException){ > > > > + DEBUG ((EFI_D_INFO, "EdkiiSmmWaitForAllApArrival: Timeout to wait > > + all APs arrival\n")); > > > > + } > > > > return Status; > > > > } > > > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c > > b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c > > index 882dee4fe2..9c7b16728a 100644 > > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c > > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c > > @@ -261,7 +261,7 @@ IsLmceSignaled ( > > **/ > > > > VOID > > > > SmmWaitForApArrival ( > > > > - VOID > > > > + IN BOOLEAN BlockingMode > > > > ) > > > > { > > > > UINT64 Timer; > > > > @@ -270,7 +270,14 @@ SmmWaitForApArrival ( > > BOOLEAN LmceSignal; > > > > > > > > ASSERT (*mSmmMpSyncData->Counter <= mNumberOfCpus); > > > > - > > > > + > > > > + // > > > > + // if block is False, do not wait and return immediately. > > > > + // > > > > + if (!BlockingMode){ > > > > + return; > > > > + } > > > > + > > > > LmceEn = FALSE; > > > > LmceSignal = FALSE; > > > > if (mMachineCheckSupported) { > > > > @@ -511,7 +518,7 @@ BSPHandler ( > > // > > > > // Wait for APs to arrive > > > > // > > > > - SmmWaitForApArrival (); > > > > + SmmWaitForApArrival(TRUE); > > The dropped space is mandatory by the code style standard. > > > > > > > > > // > > > > // Lock the counter down and retrieve the number of APs > > > > @@ -1886,6 +1893,7 @@ InitializeMpSyncData ( > > *mSmmMpSyncData->Counter = 0; > > > > *mSmmMpSyncData->InsideSmm = FALSE; > > > > *mSmmMpSyncData->AllCpusInSync = FALSE; > > > > + mSmmMpSyncData->AllApArrivedWithException = FALSE; > > > > > > > > for (CpuIndex = 0; CpuIndex < > > gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus; CpuIndex++) { > > > > mSmmMpSyncData->CpuData[CpuIndex].Busy = > > > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c > > b/UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c > > index 0c070c5736..844263f889 100644 > > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c > > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c > > @@ -8,7 +8,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > > > > > > #include "PiSmmCpuDxeSmm.h" > > > > > > > > -UINT64 mTimeoutTicker = 0; > > > > +UINT64 mTimeoutTicker = 0; > > > > // > > > > // Number of counts in a roll-over cycle of the performance counter. > > > > // > > > > diff --git a/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h > > b/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h > > new file mode 100644 > > index 0000000000..f245c3a1c9 > > --- /dev/null > > +++ b/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h > > @@ -0,0 +1,27 @@ > > +/** @file > > > > +SMM CPU Rendezvous library header file. > > > > + > > > > +Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> > > > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > > > + > > > > +**/ > > > > + > > > > +#ifndef _SMM_CPU_RENDEZVOUS_H_ > > > > +#define _SMM_CPU_RENDEZVOUS_H_ > > > > + > > > > +/** > > > > + This routine wait for all AP processors to arrive in SMM. > > > > + > > > > + @param BlockingMode Blocking mode or non-blocking mode. > > > > + > > > > + @retval TRUE All processors checked in to SMM > > > > + @retval FALSE Some processor not checked in to SMM > > > > + > > > > +**/ > > > > +EFI_STATUS > > > > +EFIAPI > > > > +SmmWaitForAllProcessor ( > > > > + IN BOOLEAN BlockingMode > > > > + ); > > > > + > > > > +#endif > > > > diff --git a/UefiCpuPkg/Include/Protocol/SmmCpuService.h > > b/UefiCpuPkg/Include/Protocol/SmmCpuService.h > > index 952767afce..0ace5356a9 100644 > > --- a/UefiCpuPkg/Include/Protocol/SmmCpuService.h > > +++ b/UefiCpuPkg/Include/Protocol/SmmCpuService.h > > @@ -200,4 +200,44 @@ struct _EFI_SMM_CPU_SERVICE_PROTOCOL { > > > > > > extern EFI_GUID gEfiSmmCpuServiceProtocolGuid; > > > > > > > > +// > > > > +// EDKII_SMM_CPU_SERVICE_PROTOCOL extends the > > +EFI_SMM_CPU_SERVICE_PROTOCOL > > > > +// with rendezvous service support. > > > > +// > > > > +#define EDKII_SMM_CPU_SERVICE_PROTOCOL_GUID \ > > > > + { \ > > > > + 0xaa00d50b, 0x4911, 0x428f, {0xb9, 0x1a, 0xa5, 0x9d, 0xdb, 0x13, > > + 0xe2, 0x4c} \ > > > > + } > > > > + > > > > +typedef struct _EDKII_SMM_CPU_SERVICE_PROTOCOL > > +EDKII_SMM_CPU_SERVICE_PROTOCOL; > > > > + > > > > +/** > > > > + Wait for all APs to arrive SMM mode in given timeout constraint. > > > > + > > > > + @param This A pointer to the SMM_CPU_SERVICE_PROTOCOL > instance. > > > > + @param BlockingMode Block or non-block mode. > > > > + > > > > + @retval EFI_SUCCESS All APs have arrived SMM mode except SMI > disabled APs. > > > > + @retval EFI_TIMEOUT There are APs not in SMM mode in given > timeout constraint. > > > > + > > > > +**/ > > > > +typedef > > > > +EFI_STATUS > > > > +(EFIAPI *EDKII_WAIT_FOR_ALL_PROCESSOR) ( > > > > + IN EDKII_SMM_CPU_SERVICE_PROTOCOL *This, > > > > + IN BOOLEAN BlockingMode > > > > + ); > > > > + > > > > +struct _EDKII_SMM_CPU_SERVICE_PROTOCOL { > > > > + EFI_SMM_GET_PROCESSOR_INFO GetProcessorInfo; > > > > + EFI_SMM_SWITCH_BSP SwitchBsp; > > > > + EFI_SMM_ADD_PROCESSOR AddProcessor; > > > > + EFI_SMM_REMOVE_PROCESSOR RemoveProcessor; > > > > + EFI_SMM_WHOAMI WhoAmI; > > > > + EFI_SMM_REGISTER_EXCEPTION_HANDLER RegisterExceptionHandler; > > > > + EDKII_WAIT_FOR_ALL_PROCESSOR WaitForAllProcessor; > > > > +}; > > > > + > > > > +extern EFI_GUID gEdkiiSmmCpuServiceProtocolGuid; > > > > + > > > > #endif > > > > diff --git > > a/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf > > b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf > > new file mode 100644 > > index 0000000000..aff77c5a18 > > --- /dev/null > > +++ > b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf > > @@ -0,0 +1,32 @@ > > +## @file > > > > +# Component description file for CPU SMM Rendezvous check library > > > > +## > > > > + > > > > +[Defines] > > > > + INF_VERSION = 0x00010005 > > > > + BASE_NAME = SmmCpuRendezvousLib > > > > + FILE_GUID = 1509Bb36-9Ba4-438B-B195-Ac5914Db14E2 > > > > + MODULE_TYPE = DXE_SMM_DRIVER > > > > + VERSION_STRING = 1.0 > > > > + LIBRARY_CLASS = SmmCpuRendezvousLib > > > > + CONSTRUCTOR = SmmCpuRendezvousLibConstructor > > > > + > > > > +[Sources] > > > > + SmmCpuRendezvousLib.c > > > > + > > > > +[Packages] > > > > + MdePkg/MdePkg.dec > > > > + UefiCpuPkg/UefiCpuPkg.dec > > > > + > > > > +[LibraryClasses] > > > > + BaseLib > > > > + DebugLib > > > > + PcdLib > > > > + SmmServicesTableLib > > > > + > > > > +[Pcd] > > > > + gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmApSyncTimeout ## > CONSUMES > > > > + > > > > +[Protocols] > > > > + gEdkiiSmmCpuServiceProtocolGuid > > > > + > > > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h > > b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h > > index 26d07c5b5e..c6f31ace77 100644 > > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h > > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h > > @@ -428,6 +428,7 @@ typedef struct { > > volatile SMM_CPU_SYNC_MODE EffectiveSyncMode; > > > > volatile BOOLEAN SwitchBsp; > > > > volatile BOOLEAN *CandidateBsp; > > > > + volatile BOOLEAN AllApArrivedWithException; > > > > EFI_AP_PROCEDURE StartupProcedure; > > > > VOID *StartupProcArgs; > > > > } SMM_DISPATCHER_MP_SYNC_DATA; > > > > @@ -1488,4 +1489,31 @@ IsRestrictedMemoryAccess ( > > VOID > > > > ); > > > > > > > > +/** > > > > + Choose blocking or non-blocking mode to Wait for all APs > > > > + > > > > + @param This A pointer to the SMM_CPU_SERVICE_PROTOCOL > instance. > > > > + @param BlockingMode Blocking or non-blocking mode > > > > + > > > > + @retval EFI_SUCCESS All APs have arrived SMM mode except SMI > disabled APs. > > > > + @retval EFI_TIMEOUT There are APs not in SMM mode in given > timeout constraint. > > > > + > > > > +**/ > > > > +EFI_STATUS > > > > +EFIAPI > > > > +SmmWaitForAllProcessor ( > > > > + IN EDKII_SMM_CPU_SERVICE_PROTOCOL *This, > > > > + IN BOOLEAN BlockingMode > > > > + ); > > > > + > > > > +/** > > > > + Choose blocking or non-blocking mode to wait for all APs. True for > Blocking and false for not. > > > > + Insure when this function returns, no AP will execute normal mode code > before entering SMM, except SMI disabled APs. > > > > + > > > > +**/ > > > > +VOID > > > > +SmmWaitForApArrival ( > > > > + IN BOOLEAN BlockingMode > > > > + ); > > > > + > > > > #endif > > > > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf > > b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf > > index 0e88071c70..1af7280d18 100644 > > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf > > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf > > @@ -107,7 +107,8 @@ > > gEfiSmmReadyToLockProtocolGuid ## NOTIFY > > > > gEfiSmmCpuServiceProtocolGuid ## PRODUCES > > > > gEdkiiSmmMemoryAttributeProtocolGuid ## PRODUCES > > > > - gEfiMmMpProtocolGuid ## PRODUCES > > > > + gEfiMmMpProtocolGuid ## PRODUCES > > > > + gEdkiiSmmCpuServiceProtocolGuid ## PRODUCES > > > > > > > > [Guids] > > > > gEfiAcpiVariableGuid ## SOMETIMES_CONSUMES ## HOB # > > it is > used for S3 boot. > > > > diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec > > index 7de66fde67..c170e7d75d 100644 > > --- a/UefiCpuPkg/UefiCpuPkg.dec > > +++ b/UefiCpuPkg/UefiCpuPkg.dec > > @@ -77,7 +77,8 @@ > > > > > > [Protocols] > > > > ## Include/Protocol/SmmCpuService.h > > > > - gEfiSmmCpuServiceProtocolGuid = { 0x1d202cab, 0xc8ab, 0x4d5c, { > > 0x94, 0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }} > > > > + gEfiSmmCpuServiceProtocolGuid = { 0x1d202cab, 0xc8ab, 0x4d5c, { 0x94, > 0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }} > > > > + gEdkiiSmmCpuServiceProtocolGuid = { 0xaa00d50b, 0x4911, 0x428f, { > > + 0xb9, 0x1a, 0xa5, 0x9d, 0xdb, 0x13, 0xe2, 0x4c }} > > > > > > > > ## Include/Protocol/SmMonitorInit.h > > > > gEfiSmMonitorInitProtocolGuid = { 0x228f344d, 0xb3de, 0x43bb, { > > 0xa4, 0xd7, 0xea, 0x20, 0xb, 0x1b, 0x14, 0x82 }} > > > > @@ -304,7 +305,7 @@ > > # 0x00 - Traditional CPU synchronization method.<BR> > > > > # 0x01 - Relaxed CPU synchronization method.<BR> > > > > # @Prompt SMM CPU Synchronization Method. > > > > - > gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x00|UINT8|0x60000 > 014 > > > > + > gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01|UINT8|0x60000 > 014 > > > > > > > > ## Specifies the On-demand clock modulation duty cycle when ACPI > feature is enabled. > > > > # @Prompt The encoded values for target duty cycle modulation. > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#86726): https://edk2.groups.io/g/devel/message/86726 Mute This Topic: https://groups.io/mt/88991121/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-