From: "Siyuan, Fu" <siyuan.fu@intel.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
"Li, Zhihao" <zhihao.li@intel.com>
Cc: "Dong, Eric" <eric.dong@intel.com>, "Ni, Ray" <ray.ni@intel.com>,
"Kumar, Rahul1" <rahul1.kumar@intel.com>
Subject: Re: [edk2-devel] [PATCH v2 1/1] UefiCpuPkg: Extend SMM CPU Service with rendezvous support.
Date: Wed, 23 Feb 2022 10:19:30 +0000 [thread overview]
Message-ID: <MWHPR11MB1598346405268F175B2EBD11EB3C9@MWHPR11MB1598.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20220223064215.3570-1-zhihao.li@intel.com>
Hi, Zhihao
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Li, Zhihao
> Sent: 2022年2月23日 14:42
> To: devel@edk2.groups.io
> Cc: Dong, Eric <eric.dong@intel.com>; Ni, Ray <ray.ni@intel.com>; Kumar,
> Rahul1 <rahul1.kumar@intel.com>; Fu, Siyuan <siyuan.fu@intel.com>
> Subject: [edk2-devel] [PATCH v2 1/1] UefiCpuPkg: Extend SMM CPU Service with
> rendezvous support.
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3815
>
> This patch define a new Protocol with the new services
> 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.
>
> Patch_v3 modified to pass CI test. (1)Add SmmCpuRendezvousLib.inf into
> UefiCpuPkg.dsc <LibraryClasses>/<Component> (2)Add
> SmmCpuRendezvousLib.h
> in UefiCpuPkg.dec [Libraryclasses.IA32, Libraryclasses.x64] (3) Some
> UncrustifyCheck modifications.
>
> Cc: Eric Dong <eric.dong@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Rahul Kumar <rahul1.kumar@intel.com>
> Cc: Siyuan Fu <siyuan.fu@intel.com>
>
> Signed-off-by: Zhihao Li <zhihao.li@intel.com>
> ---
> UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c | 98
> ++++++++++++++++++++
> UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c | 68
> +++++++++++++-
> UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c | 15 ++-
> UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h | 27 ++++++
> UefiCpuPkg/Include/Protocol/SmmCpuService.h | 36 ++++++-
> UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf | 35
> +++++++
> UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h | 30 +++++-
> UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf | 5 +-
> UefiCpuPkg/UefiCpuPkg.dec | 8 +-
> UefiCpuPkg/UefiCpuPkg.dsc | 2 +
> 10 files changed, 314 insertions(+), 10 deletions(-)
>
> diff --git
> a/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c
> b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c
> new file mode 100644
> index 000000000000..a53a5a8f301a
> --- /dev/null
> +++ b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c
> @@ -0,0 +1,98 @@
> +/** @file
>
> + SMM CPU Rendezvous sevice implement.
>
> +
>
> + Copyright (c) 2021 - 2022, 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/MmServicesTableLib.h>
>
> +#include <Protocol/SmmCpuService.h>
>
> +#include <Library/SmmCpuRendezvousLib.h>
>
> +
>
> +STATIC EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL *mSmmCpuRendezvous =
> NULL;
>
> +STATIC VOID *mRegistration = NULL;
>
> +
>
> +/**
>
> + Register status code callback function only when Report Status Code protocol
>
> + is installed.
>
> +
>
> + @param[in] Protocol Points to the protocol's unique identifier.
>
> + @param[in] Interface Points to the interface instance.
>
> + @param[in] Handle The handle on which the interface was installed.
>
> +
>
> + @retval EFI_SUCCESS Notification runs successfully.
>
> +
>
> +**/
>
> +EFI_STATUS
>
> +EFIAPI
>
> +SmmCpuRendezvousProtocolNotify (
>
> + IN CONST EFI_GUID *Protocol,
>
> + IN VOID *Interface,
>
> + IN EFI_HANDLE Handle
>
> + )
>
> +{
>
> + EFI_STATUS Status;
>
> +
>
> + Status = gMmst->MmLocateProtocol (
>
> + &gEdkiiSmmCpuRendezvousProtocolGuid,
>
> + NULL,
>
> + (VOID **)&mSmmCpuRendezvous
>
> + );
>
> + ASSERT_EFI_ERROR (Status);
>
> +
>
> + return EFI_SUCCESS;
>
> +}
>
> +
>
> +/**
>
> + This routine wait for all AP processors to arrive in SMM.
>
> +
>
> + @param[in] BlockingMode Blocking mode or non-blocking mode.
>
> +
>
> + @retval EFI_SUCCESS All avaiable APs arrived.
>
> + @retval EFI_TIMEOUT Wait for all APs until timeout.
>
> + @retval OTHER Fail to register SMM CPU Rendezvous service Protocol.
>
> +**/
>
> +EFI_STATUS
>
> +EFIAPI
>
> +SmmWaitForAllProcessor (
>
> + IN BOOLEAN BlockingMode
>
> + )
>
> +{
>
> + EFI_STATUS Status;
>
> +
>
> + if ((mRegistration == NULL) && (mSmmCpuRendezvous == NULL)) {
>
> + //
>
> + // Locate SMM cpu rendezvous protocol for the first time execute the
> function.
>
> + //
>
> + Status = gMmst->MmLocateProtocol (
>
> + &gEdkiiSmmCpuRendezvousProtocolGuid,
>
> + NULL,
>
> + (VOID **)&mSmmCpuRendezvous
>
> + );
>
> + if (EFI_ERROR (Status)) {
>
> + Status = gMmst->MmRegisterProtocolNotify (
>
> + &gEdkiiSmmCpuRendezvousProtocolGuid,
>
> + SmmCpuRendezvousProtocolNotify,
>
> + &mRegistration
>
> + );
>
> + if (EFI_ERROR (Status)) {
>
> + return Status;
>
> + }
>
> + }
>
> + }
>
> +
>
> + if (mSmmCpuRendezvous == NULL) {
>
> + return EFI_SUCCESS;
>
> + }
>
> +
>
> + Status = mSmmCpuRendezvous->WaitForAllProcessor (
>
> + mSmmCpuRendezvous,
>
> + BlockingMode
>
> + );
>
> + return Status;
>
> +}
>
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c
> b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c
> index 5d624f8e9ed6..fceb663fb74f 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c
> @@ -1,7 +1,7 @@
> /** @file
>
> Implementation of SMM CPU Services Protocol.
>
>
>
> -Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
>
> +Copyright (c) 2011 - 2022, Intel Corporation. All rights reserved.<BR>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
>
>
> **/
>
> @@ -20,6 +20,13 @@ EFI_SMM_CPU_SERVICE_PROTOCOL mSmmCpuService
> = {
> SmmRegisterExceptionHandler
>
> };
>
>
>
> +//
>
> +// EDKII SMM CPU Rendezvous Service Protocol instance
>
> +//
>
> +EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL mSmmCpuRendezvousService = {
>
> + SmmWaitForAllProcessor
>
> +};
>
> +
>
> /**
>
> Gets processor information on the requested processor at the instant this call
> is made.
>
>
>
> @@ -350,6 +357,7 @@ SmmRegisterExceptionHandler (
> @param ImageHandle The firmware allocated handle for the EFI image.
>
>
>
> @retval EFI_SUCCESS EFI SMM CPU Services Protocol was installed
> successfully.
>
> + @retval OTHER Fail to install Protocol.
>
> **/
>
> EFI_STATUS
>
> InitializeSmmCpuServices (
>
> @@ -364,6 +372,64 @@ InitializeSmmCpuServices (
> EFI_NATIVE_INTERFACE,
>
> &mSmmCpuService
>
> );
>
> + if (EFI_ERROR (Status)) {
>
> + return Status;
>
> + }
>
> +
>
> + Status = gSmst->SmmInstallProtocolInterface (
>
> + &Handle,
>
> + &gEdkiiSmmCpuRendezvousProtocolGuid,
>
> + EFI_NATIVE_INTERFACE,
>
> + &mSmmCpuRendezvousService
>
> + );
>
> ASSERT_EFI_ERROR (Status);
>
> return Status;
>
> }
>
> +
>
> +/**
>
> + Wait for all processors enterring SMM until all CPUs are already synchronized
> or not.
>
> +
>
> + If BlockingMode is False, timeout value is zero.
>
> +
>
> + @param This A pointer to the
> EDKII_SMM_CPU_RENDEZVOUS_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_RENDEZVOUS_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 ((DEBUG_INFO, "EdkiiSmmWaitForAllApArrival: Timeout to wait all
> APs arrival\n"));
>
> + }
>
> +
>
> + return Status;
>
> +}
>
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
> b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
> index 882dee4fe246..6a8693dae989 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
> @@ -1,7 +1,7 @@
> /** @file
>
> SMM MP service implementation
>
>
>
> -Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>
>
> +Copyright (c) 2009 - 2022, Intel Corporation. All rights reserved.<BR>
>
> Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
>
>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -261,7 +261,7 @@ IsLmceSignaled (
> **/
>
> VOID
>
> SmmWaitForApArrival (
>
> - VOID
>
> + IN BOOLEAN BlockingMode
Do we really need to add the parameter BlockingMode for this function? I found
it's set to FALSE in all the code path.
Thanks.
>
> )
>
> {
>
> UINT64 Timer;
>
> @@ -271,6 +271,13 @@ SmmWaitForApArrival (
>
>
> 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);
>
>
>
> //
>
> // Lock the counter down and retrieve the number of APs
>
> @@ -1887,6 +1894,8 @@ InitializeMpSyncData (
> *mSmmMpSyncData->InsideSmm = FALSE;
>
> *mSmmMpSyncData->AllCpusInSync = FALSE;
>
>
>
> + mSmmMpSyncData->AllApArrivedWithException = FALSE;
>
> +
>
> for (CpuIndex = 0; CpuIndex < gSmmCpuPrivate-
> >SmmCoreEntryContext.NumberOfCpus; CpuIndex++) {
>
> mSmmMpSyncData->CpuData[CpuIndex].Busy =
>
> (SPIN_LOCK *)((UINTN)mSmmCpuSemaphores.SemaphoreCpu.Busy +
> mSemaphoreSize * CpuIndex);
>
> diff --git a/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h
> b/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h
> new file mode 100644
> index 000000000000..d0a987dc7d0a
> --- /dev/null
> +++ b/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h
> @@ -0,0 +1,27 @@
> +/** @file
>
> + SMM CPU Rendezvous library header file.
>
> +
>
> + Copyright (c) 2021 - 2022, 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[in] BlockingMode Blocking mode or non-blocking mode.
>
> +
>
> + @retval EFI_SUCCESS All processors checked in to SMM.
>
> + @retval EFI_TIMEOUT Wait for all APs until timeout.
>
> +
>
> +**/
>
> +EFI_STATUS
>
> +EFIAPI
>
> +SmmWaitForAllProcessor (
>
> + IN BOOLEAN BlockingMode
>
> + );
>
> +
>
> +#endif
>
> diff --git a/UefiCpuPkg/Include/Protocol/SmmCpuService.h
> b/UefiCpuPkg/Include/Protocol/SmmCpuService.h
> index 952767afce75..3d93d243409c 100644
> --- a/UefiCpuPkg/Include/Protocol/SmmCpuService.h
> +++ b/UefiCpuPkg/Include/Protocol/SmmCpuService.h
> @@ -1,7 +1,7 @@
> /** @file
>
> SMM CPU Service protocol definition.
>
>
>
> -Copyright (c) 2013 - 2015, Intel Corporation. All rights reserved.<BR>
>
> +Copyright (c) 2013 - 2022, Intel Corporation. All rights reserved.<BR>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
>
>
> **/
>
> @@ -200,4 +200,38 @@ struct _EFI_SMM_CPU_SERVICE_PROTOCOL {
>
>
> extern EFI_GUID gEfiSmmCpuServiceProtocolGuid;
>
>
>
> +//
>
> +// EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL provide SMM CPU
>
> +// rendezvous service support.
>
> +//
>
> +#define EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL_GUID \
>
> + { \
>
> + 0xaa00d50b, 0x4911, 0x428f, { 0xb9, 0x1a, 0xa5, 0x9d, 0xdb, 0x13, 0xe2,
> 0x4c } \
>
> + }
>
> +
>
> +typedef struct _EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL
> EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL;
>
> +
>
> +/**
>
> + Wait for all APs to arrive SMM mode in given timeout constraint.
>
> +
>
> + @param[in] This A pointer to the
> EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL instance.
>
> + @param[in] 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_RENDEZVOUS_PROTOCOL *This,
>
> + IN BOOLEAN BlockingMode
>
> + );
>
> +
>
> +struct _EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL {
>
> + EDKII_WAIT_FOR_ALL_PROCESSOR WaitForAllProcessor;
>
> +};
>
> +
>
> +extern EFI_GUID gEdkiiSmmCpuRendezvousProtocolGuid;
>
> +
>
> #endif
>
> diff --git
> a/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf
> b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf
> new file mode 100644
> index 000000000000..76896a5b0e1a
> --- /dev/null
> +++ b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf
> @@ -0,0 +1,35 @@
> +## @file
>
> +# SMM CPU Rendezvous service lib.
>
> +#
>
> +# This is SMM CPU rendezvous service lib that wait for all
>
> +# APs to enter SMM mode.
>
> +#
>
> +# Copyright (c) 2021 - 2022, Intel Corporation. All rights reserved.<BR>
>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +#
>
> +##
>
> +
>
> +[Defines]
>
> + INF_VERSION = 0x00010005
>
> + BASE_NAME = SmmCpuRendezvousLib
>
> + FILE_GUID = 1509Bb36-9Ba4-438B-B195-Ac5914Db14E2
>
> + MODULE_TYPE = DXE_SMM_DRIVER
>
> + LIBRARY_CLASS = SmmCpuRendezvousLib|MM_STANDALONE
> DXE_SMM_DRIVER
>
> +
>
> +[Sources]
>
> + SmmCpuRendezvousLib.c
>
> +
>
> +[Packages]
>
> + MdePkg/MdePkg.dec
>
> + UefiCpuPkg/UefiCpuPkg.dec
>
> +
>
> +[LibraryClasses]
>
> + BaseLib
>
> + DebugLib
>
> + MmServicesTableLib
>
> +
>
> +[Pcd]
>
> + gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmApSyncTimeout ##
> CONSUMES
>
> +
>
> +[Protocols]
>
> + gEdkiiSmmCpuRendezvousProtocolGuid
>
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
> b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
> index 26d07c5b5ea0..1960bb4015ef 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
> @@ -1,7 +1,7 @@
> /** @file
>
> Agent Module to load other modules to deploy SMM Entry Vector for X86 CPU.
>
>
>
> -Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.<BR>
>
> +Copyright (c) 2009 - 2022, Intel Corporation. All rights reserved.<BR>
>
> Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
>
>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -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[in] This A pointer to the
> EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL instance.
>
> + @param[in] 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_RENDEZVOUS_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 0e88071c7079..deef00f9c6e9 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
> @@ -4,7 +4,7 @@
> # This SMM driver performs SMM initialization, deploy SMM Entry Vector,
>
> # provides CPU specific services in SMM.
>
> #
>
> -# Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>
>
> +# Copyright (c) 2009 - 2022, Intel Corporation. All rights reserved.<BR>
>
> # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
>
> #
>
> # SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -107,7 +107,8 @@
> gEfiSmmReadyToLockProtocolGuid ## NOTIFY
>
> gEfiSmmCpuServiceProtocolGuid ## PRODUCES
>
> gEdkiiSmmMemoryAttributeProtocolGuid ## PRODUCES
>
> - gEfiMmMpProtocolGuid ## PRODUCES
>
> + gEfiMmMpProtocolGuid ## PRODUCES
>
> + gEdkiiSmmCpuRendezvousProtocolGuid ## PRODUCES
>
>
>
> [Guids]
>
> gEfiAcpiVariableGuid ## SOMETIMES_CONSUMES ## HOB # it is
> used for S3 boot.
>
> diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec
> index 7de66fde674c..525cde463435 100644
> --- a/UefiCpuPkg/UefiCpuPkg.dec
> +++ b/UefiCpuPkg/UefiCpuPkg.dec
> @@ -1,7 +1,7 @@
> ## @file UefiCpuPkg.dec
>
> # This Package provides UEFI compatible CPU modules and libraries.
>
> #
>
> -# Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>
>
> +# Copyright (c) 2007 - 2022, Intel Corporation. All rights reserved.<BR>
>
> #
>
> # SPDX-License-Identifier: BSD-2-Clause-Patent
>
> #
>
> @@ -62,6 +62,9 @@
> ## @libraryclass Provides function for loading microcode.
>
> MicrocodeLib|Include/Library/MicrocodeLib.h
>
>
>
> + ## @libraryclass Provides function for SMM CPU Rendezvous Library.
>
> + SmmCpuRendezvousLib|Include/Library/SmmCpuRendezvousLib.h
>
> +
>
> [Guids]
>
> gUefiCpuPkgTokenSpaceGuid = { 0xac05bf33, 0x995a, 0x4ed4, { 0xaa, 0xb8,
> 0xef, 0x7a, 0xe8, 0xf, 0x5c, 0xb0 }}
>
> gMsegSmramGuid = { 0x5802bce4, 0xeeee, 0x4e33, { 0xa1, 0x30,
> 0xeb, 0xad, 0x27, 0xf0, 0xe4, 0x39 }}
>
> @@ -77,7 +80,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 }}
>
> + gEdkiiSmmCpuRendezvousProtocolGuid = { 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 }}
>
> diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc
> index d1d61dd6a03b..a0bbde9985d3 100644
> --- a/UefiCpuPkg/UefiCpuPkg.dsc
> +++ b/UefiCpuPkg/UefiCpuPkg.dsc
> @@ -61,6 +61,7 @@
>
> TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmM
> easurementLibNull.inf
>
> VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf
>
> MicrocodeLib|UefiCpuPkg/Library/MicrocodeLib/MicrocodeLib.inf
>
> +
> SmmCpuRendezvousLib|UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuR
> endezvousLib.inf
>
>
>
> [LibraryClasses.common.SEC]
>
> PlatformSecLib|UefiCpuPkg/Library/PlatformSecLibNull/PlatformSecLibNull.inf
>
> @@ -173,6 +174,7 @@
> }
>
> UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
>
> UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.inf
>
> + UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf
>
>
>
> [BuildOptions]
>
> *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
>
> --
> 2.26.2.windows.1
>
>
>
>
>
next prev parent reply other threads:[~2022-02-23 10:19 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-23 6:42 [PATCH v2 1/1] UefiCpuPkg: Extend SMM CPU Service with rendezvous support Li, Zhihao
2022-02-23 10:19 ` Siyuan, Fu [this message]
2022-02-23 13:00 ` [edk2-devel] " Li, Zhihao
2022-03-01 7:31 ` Ni, Ray
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=MWHPR11MB1598346405268F175B2EBD11EB3C9@MWHPR11MB1598.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox