From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web12.7649.1644298579452063646 for ; Mon, 07 Feb 2022 21:36:22 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=Vaesh3K3; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: zhihao.li@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644298581; x=1675834581; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=nN/1/x+x883Oyhh56AoKb4vydkBZboCVxlTOzlhvzik=; b=Vaesh3K3jmaFA3Sud7VVI5WOw27ZIegkd5kaIT9ZZaxDHFVUsjLX+lNm y2oGz88kmEPDFSwbSyz7imTdNrm9ulirYdviYiUE6j19pizwSGGKLmu86 OJ21UfJysLb4q2wOuY6A4QH7u4I0bf9k34D8J0A5FVPDDQN7BLyAvxyyh BFQn5mXhDpHofXj3Nc7pkhFKnE3evU9EbECC4kUVZI1MKIfKbklX/Ndt0 ufnkOJld4ez0QH4wRZ5czCRy4pCW2hrdLrjTHMG3dkARpLSZkAAC+RLcF 9PcRNqJNGvSMSmSThKyKuqpNTQJmJu4Hf2T0rJKtRhbnyfnGsEfJARJdR Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10251"; a="312174861" X-IronPort-AV: E=Sophos;i="5.88,351,1635231600"; d="scan'208";a="312174861" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Feb 2022 21:35:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,351,1635231600"; d="scan'208";a="525414529" Received: from win_li.ccr.corp.intel.com ([10.239.157.34]) by orsmga007.jf.intel.com with ESMTP; 07 Feb 2022 21:35:56 -0800 From: "Li, Zhihao" To: devel@edk2.groups.io Cc: Eric Dong , Ray Ni , Rahul Kumar Subject: [PATCH v1 1/2] UefiCpuPkg: Extend SMM CPU Service with rendezvous support. Date: Tue, 8 Feb 2022 13:35:55 +0800 Message-Id: <20220208053556.844-1-zhihao.li@intel.com> X-Mailer: git-send-email 2.26.2.windows.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable From: Zhihao Li REF=EF=BC=9A https://bugzilla.tianocore.org/show_bug.cgi?id=3D3815 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 Cc: Ray Ni Cc: Rahul Kumar Signed-off-by: Zhihao Li --- 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=0D +SMM CPU Rendezvous library header file.=0D +=0D +Copyright (c) 2021, Intel Corporation. All rights reserved.
=0D +SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +=0D +#include =0D +#include =0D +#include =0D +#include =0D +#include =0D +#include =0D +#include =0D +#include =0D +=0D +STATIC EDKII_SMM_CPU_SERVICE_PROTOCOL *mSmmCpuService =3D NULL;=0D +=0D +/**=0D + This routine wait for all AP processors to arrive in SMM.=0D +=0D + @param BlockingMode Blocking mode or non-blocking mode.=0D +=0D + @retval TRUE All processors checked in to SMM=0D + @retval FALSE Some processor not checked in to SMM=0D +=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +SmmWaitForAllProcessor (=0D + IN BOOLEAN BlockingMode=0D + )=0D +{=0D + EFI_STATUS Status;=0D +=0D + if (mSmmCpuService =3D=3D NULL) {=0D + return TRUE;=0D + }=0D +=0D + Status =3D mSmmCpuService->WaitForAllProcessor (=0D + mSmmCpuService,=0D + BlockingMode=0D + );=0D + return EFI_ERROR(Status) ? FALSE : TRUE;=0D +}=0D +=0D +/**=0D + Register status code callback function only when Report Status Code prot= ocol=0D + is installed.=0D +=0D + @param Protocol Points to the protocol's unique identifier.=0D + @param Interface Points to the interface instance.=0D + @param Handle The handle on which the interface was installed.=0D +=0D + @retval EFI_SUCCESS Notification runs successfully.=0D +=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +SmmCpuServiceProtocolNotify (=0D + IN CONST EFI_GUID *Protocol,=0D + IN VOID *Interface,=0D + IN EFI_HANDLE Handle=0D + )=0D +{=0D + EFI_STATUS Status;=0D +=0D + Status =3D gSmst->SmmLocateProtocol (=0D + &gEdkiiSmmCpuServiceProtocolGuid,=0D + NULL,=0D + (VOID **) &mSmmCpuService=0D + );=0D + ASSERT_EFI_ERROR (Status);=0D +=0D + return EFI_SUCCESS;=0D +}=0D +=0D +/**=0D + The constructor function=0D +=0D + @param[in] ImageHandle The firmware allocated handle for the EFI image= .=0D + @param[in] SystemTable A pointer to the EFI System Table.=0D +=0D + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.=0D +=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +SmmCpuRendezvousLibConstructor (=0D + IN EFI_HANDLE ImageHandle,=0D + IN EFI_SYSTEM_TABLE *SystemTable=0D + )=0D +{=0D + EFI_STATUS Status;=0D + VOID *Registration;=0D +=0D + Status =3D gSmst->SmmLocateProtocol (&gEdkiiSmmCpuServiceProtocolGuid, N= ULL, (VOID **) &mSmmCpuService);=0D + if (EFI_ERROR (Status)) {=0D + Status =3D gSmst->SmmRegisterProtocolNotify (=0D + &gEdkiiSmmCpuServiceProtocolGuid,=0D + SmmCpuServiceProtocolNotify,=0D + &Registration=0D + );=0D + ASSERT_EFI_ERROR (Status);=0D + }=0D + return EFI_SUCCESS;=0D +} \ No newline at end of file diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c b/UefiCpuPkg/PiSmmCpuDx= eSmm/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 =3D { SmmRegisterExceptionHandler=0D };=0D =0D +//=0D +// EDKII SMM CPU Service Protocol instance=0D +//=0D +EDKII_SMM_CPU_SERVICE_PROTOCOL mEdkiiSmmCpuService =3D {=0D + SmmGetProcessorInfo,=0D + SmmSwitchBsp,=0D + SmmAddProcessor,=0D + SmmRemoveProcessor,=0D + SmmWhoAmI,=0D + SmmRegisterExceptionHandler,=0D + SmmWaitForAllProcessor=0D +};=0D +=0D /**=0D Gets processor information on the requested processor at the instant thi= s call is made.=0D =0D @@ -365,5 +378,57 @@ InitializeSmmCpuServices ( &mSmmCpuService=0D );=0D ASSERT_EFI_ERROR (Status);=0D +=0D + Status =3D gSmst->SmmInstallProtocolInterface (=0D + &Handle,=0D + &gEdkiiSmmCpuServiceProtocolGuid,=0D + EFI_NATIVE_INTERFACE,=0D + &mEdkiiSmmCpuService=0D + );=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=0D +}=0D +=0D +/**=0D + Wait for all processors enterring SMM until all CPUs are already synchro= nized or not.=0D +=0D + @param This A pointer to the EDKII_SMM_CPU_SERVICE_PR= OTOCOL instance.=0D + @param BlockingMode Blocking mode or non-blocking mode.=0D +=0D + @retval EFI_SUCCESS All avaiable APs arrived.=0D + @retval EFI_TIMEOUT Wait for all APs until timeout.=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +SmmWaitForAllProcessor (=0D + IN EDKII_SMM_CPU_SERVICE_PROTOCOL *This,=0D + IN BOOLEAN BlockingMode=0D + )=0D +{=0D + EFI_STATUS Status;=0D +=0D + //=0D + // Return success immediately if all CPUs are already synchronized.=0D + //=0D + if (mSmmMpSyncData->AllApArrivedWithException) {=0D + Status =3D EFI_SUCCESS;=0D + goto ON_EXIT;=0D + }=0D +=0D + if (!BlockingMode) {=0D + Status =3D EFI_TIMEOUT;=0D + goto ON_EXIT;=0D + }=0D +=0D + //=0D + // There are some APs outside SMM, Wait for all avaiable APs to arrive.= =0D + //=0D + SmmWaitForApArrival (BlockingMode);=0D + Status =3D mSmmMpSyncData->AllApArrivedWithException ? EFI_SUCCESS : EFI= _TIMEOUT;=0D +=0D +ON_EXIT:=0D + if (!mSmmMpSyncData->AllApArrivedWithException){=0D + DEBUG ((EFI_D_INFO, "EdkiiSmmWaitForAllApArrival: Timeout to wait all = APs arrival\n"));=0D + }=0D return Status;=0D }=0D diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c b/UefiCpuPkg/PiSmmCpuDxe= Smm/MpService.c index 882dee4fe2..9c7b16728a 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c @@ -261,7 +261,7 @@ IsLmceSignaled ( **/=0D VOID=0D SmmWaitForApArrival (=0D - VOID=0D + IN BOOLEAN BlockingMode=0D )=0D {=0D UINT64 Timer;=0D @@ -270,7 +270,14 @@ SmmWaitForApArrival ( BOOLEAN LmceSignal;=0D =0D ASSERT (*mSmmMpSyncData->Counter <=3D mNumberOfCpus);=0D -=0D + =0D + //=0D + // if block is False, do not wait and return immediately.=0D + //=0D + if (!BlockingMode){=0D + return;=0D + }=0D + =0D LmceEn =3D FALSE;=0D LmceSignal =3D FALSE;=0D if (mMachineCheckSupported) {=0D @@ -511,7 +518,7 @@ BSPHandler ( //=0D // Wait for APs to arrive=0D //=0D - SmmWaitForApArrival ();=0D + SmmWaitForApArrival(TRUE);=0D =0D //=0D // Lock the counter down and retrieve the number of APs=0D @@ -1886,6 +1893,7 @@ InitializeMpSyncData ( *mSmmMpSyncData->Counter =3D 0;=0D *mSmmMpSyncData->InsideSmm =3D FALSE;=0D *mSmmMpSyncData->AllCpusInSync =3D FALSE;=0D + mSmmMpSyncData->AllApArrivedWithException =3D FALSE;=0D =0D for (CpuIndex =3D 0; CpuIndex < gSmmCpuPrivate->SmmCoreEntryContext.Nu= mberOfCpus; CpuIndex++) {=0D mSmmMpSyncData->CpuData[CpuIndex].Busy =3D=0D diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SyncTimer.c b/UefiCpuPkg/PiSmmCpuDxe= Smm/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 =0D #include "PiSmmCpuDxeSmm.h"=0D =0D -UINT64 mTimeoutTicker =3D 0;=0D +UINT64 mTimeoutTicker =3D 0;=0D //=0D // Number of counts in a roll-over cycle of the performance counter.=0D //=0D 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=0D +SMM CPU Rendezvous library header file.=0D +=0D +Copyright (c) 2021, Intel Corporation. All rights reserved.
=0D +SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +#ifndef _SMM_CPU_RENDEZVOUS_H_=0D +#define _SMM_CPU_RENDEZVOUS_H_=0D +=0D +/**=0D + This routine wait for all AP processors to arrive in SMM.=0D +=0D + @param BlockingMode Blocking mode or non-blocking mode.=0D + =0D + @retval TRUE All processors checked in to SMM=0D + @retval FALSE Some processor not checked in to SMM=0D +=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +SmmWaitForAllProcessor (=0D + IN BOOLEAN BlockingMode=0D + );=0D +=0D +#endif=0D diff --git a/UefiCpuPkg/Include/Protocol/SmmCpuService.h b/UefiCpuPkg/Inclu= de/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 { =0D extern EFI_GUID gEfiSmmCpuServiceProtocolGuid;=0D =0D +//=0D +// EDKII_SMM_CPU_SERVICE_PROTOCOL extends the EFI_SMM_CPU_SERVICE_PROTOCO= L=0D +// with rendezvous service support.=0D +//=0D +#define EDKII_SMM_CPU_SERVICE_PROTOCOL_GUID \=0D + { \=0D + 0xaa00d50b, 0x4911, 0x428f, {0xb9, 0x1a, 0xa5, 0x9d, 0xdb, 0x13, 0xe2,= 0x4c} \=0D + }=0D +=0D +typedef struct _EDKII_SMM_CPU_SERVICE_PROTOCOL EDKII_SMM_CPU_SERVICE_PROTO= COL;=0D +=0D +/**=0D + Wait for all APs to arrive SMM mode in given timeout constraint.=0D +=0D + @param This A pointer to the SMM_CPU_SERVICE_PROTOCOL = instance.=0D + @param BlockingMode Block or non-block mode.=0D +=0D + @retval EFI_SUCCESS All APs have arrived SMM mode except SMI d= isabled APs.=0D + @retval EFI_TIMEOUT There are APs not in SMM mode in given tim= eout constraint.=0D +=0D +**/=0D +typedef=0D +EFI_STATUS=0D +(EFIAPI *EDKII_WAIT_FOR_ALL_PROCESSOR) (=0D + IN EDKII_SMM_CPU_SERVICE_PROTOCOL *This,=0D + IN BOOLEAN BlockingMode=0D + );=0D +=0D +struct _EDKII_SMM_CPU_SERVICE_PROTOCOL {=0D + EFI_SMM_GET_PROCESSOR_INFO GetProcessorInfo;=0D + EFI_SMM_SWITCH_BSP SwitchBsp;=0D + EFI_SMM_ADD_PROCESSOR AddProcessor;=0D + EFI_SMM_REMOVE_PROCESSOR RemoveProcessor;=0D + EFI_SMM_WHOAMI WhoAmI;=0D + EFI_SMM_REGISTER_EXCEPTION_HANDLER RegisterExceptionHandler;=0D + EDKII_WAIT_FOR_ALL_PROCESSOR WaitForAllProcessor;=0D +};=0D +=0D +extern EFI_GUID gEdkiiSmmCpuServiceProtocolGuid;=0D +=0D #endif=0D 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=0D +# Component description file for CPU SMM Rendezvous check library=0D +##=0D +=0D +[Defines]=0D + INF_VERSION =3D 0x00010005=0D + BASE_NAME =3D SmmCpuRendezvousLib=0D + FILE_GUID =3D 1509Bb36-9Ba4-438B-B195-Ac5914Db14E2= =0D + MODULE_TYPE =3D DXE_SMM_DRIVER=0D + VERSION_STRING =3D 1.0=0D + LIBRARY_CLASS =3D SmmCpuRendezvousLib=0D + CONSTRUCTOR =3D SmmCpuRendezvousLibConstructor=0D +=0D +[Sources]=0D + SmmCpuRendezvousLib.c=0D +=0D +[Packages]=0D + MdePkg/MdePkg.dec=0D + UefiCpuPkg/UefiCpuPkg.dec=0D +=0D +[LibraryClasses]=0D + BaseLib=0D + DebugLib=0D + PcdLib=0D + SmmServicesTableLib=0D +=0D +[Pcd]=0D + gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmApSyncTimeout ## CONS= UMES=0D +=0D +[Protocols]=0D + gEdkiiSmmCpuServiceProtocolGuid=0D +=0D diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h b/UefiCpuPkg/PiSmmC= puDxeSmm/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;=0D volatile BOOLEAN SwitchBsp;=0D volatile BOOLEAN *CandidateBsp;=0D + volatile BOOLEAN AllApArrivedWithException;=0D EFI_AP_PROCEDURE StartupProcedure;=0D VOID *StartupProcArgs;=0D } SMM_DISPATCHER_MP_SYNC_DATA;=0D @@ -1488,4 +1489,31 @@ IsRestrictedMemoryAccess ( VOID=0D );=0D =0D +/**=0D + Choose blocking or non-blocking mode to Wait for all APs=0D +=0D + @param This A pointer to the SMM_CPU_SERVICE_PROTOCOL = instance.=0D + @param BlockingMode Blocking or non-blocking mode=0D +=0D + @retval EFI_SUCCESS All APs have arrived SMM mode except SMI d= isabled APs.=0D + @retval EFI_TIMEOUT There are APs not in SMM mode in given tim= eout constraint.=0D +=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +SmmWaitForAllProcessor (=0D + IN EDKII_SMM_CPU_SERVICE_PROTOCOL *This,=0D + IN BOOLEAN BlockingMode=0D + );=0D +=0D +/**=0D + Choose blocking or non-blocking mode to wait for all APs. True for Block= ing and false for not. =0D + Insure when this function returns, no AP will execute normal mode code b= efore entering SMM, except SMI disabled APs.=0D +=0D +**/=0D +VOID=0D +SmmWaitForApArrival (=0D + IN BOOLEAN BlockingMode =0D + );=0D +=0D #endif=0D diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf b/UefiCpuPkg/PiSm= mCpuDxeSmm/PiSmmCpuDxeSmm.inf index 0e88071c70..1af7280d18 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf @@ -107,7 +107,8 @@ gEfiSmmReadyToLockProtocolGuid ## NOTIFY=0D gEfiSmmCpuServiceProtocolGuid ## PRODUCES=0D gEdkiiSmmMemoryAttributeProtocolGuid ## PRODUCES=0D - gEfiMmMpProtocolGuid ## PRODUCES=0D + gEfiMmMpProtocolGuid ## PRODUCES=0D + gEdkiiSmmCpuServiceProtocolGuid ## PRODUCES=0D =0D [Guids]=0D gEfiAcpiVariableGuid ## SOMETIMES_CONSUMES ## HOB # = it is used for S3 boot.=0D 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 @@ =0D [Protocols]=0D ## Include/Protocol/SmmCpuService.h=0D - gEfiSmmCpuServiceProtocolGuid =3D { 0x1d202cab, 0xc8ab, 0x4d5c, { 0x94,= 0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }}=0D + gEfiSmmCpuServiceProtocolGuid =3D { 0x1d202cab, 0xc8ab, 0x4d5c, { 0x94= , 0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }}=0D + gEdkiiSmmCpuServiceProtocolGuid =3D { 0xaa00d50b, 0x4911, 0x428f, { 0xb9= , 0x1a, 0xa5, 0x9d, 0xdb, 0x13, 0xe2, 0x4c }}=0D =0D ## Include/Protocol/SmMonitorInit.h=0D gEfiSmMonitorInitProtocolGuid =3D { 0x228f344d, 0xb3de, 0x43bb, { 0xa4,= 0xd7, 0xea, 0x20, 0xb, 0x1b, 0x14, 0x82 }}=0D @@ -304,7 +305,7 @@ # 0x00 - Traditional CPU synchronization method.
=0D # 0x01 - Relaxed CPU synchronization method.
=0D # @Prompt SMM CPU Synchronization Method.=0D - gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x00|UINT8|0x60000014=0D + gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01|UINT8|0x60000014=0D =0D ## Specifies the On-demand clock modulation duty cycle when ACPI feature= is enabled.=0D # @Prompt The encoded values for target duty cycle modulation.=0D --=20 2.26.2.windows.1