public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Li, Zhihao" <zhihao.li@intel.com>
To: "Fu, Siyuan" <siyuan.fu@intel.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
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 13:00:04 +0000	[thread overview]
Message-ID: <DM6PR11MB47380AE65E1B7B5E2C53FEEEF93C9@DM6PR11MB4738.namprd11.prod.outlook.com> (raw)
In-Reply-To: <MWHPR11MB1598346405268F175B2EBD11EB3C9@MWHPR11MB1598.namprd11.prod.outlook.com>

Send patch v4 following Siyuan comments.

> -----Original Message-----
> From: Fu, Siyuan <siyuan.fu@intel.com>
> Sent: Wednesday, February 23, 2022 6:20 PM
> To: 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.
> 
> 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/Tp
> mM
> > easurementLibNull.inf
> >
> >    VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf
> >
> >    MicrocodeLib|UefiCpuPkg/Library/MicrocodeLib/MicrocodeLib.inf
> >
> > +
> >
> SmmCpuRendezvousLib|UefiCpuPkg/Library/SmmCpuRendezvousLib/Smm
> CpuR
> > endezvousLib.inf
> >
> >
> >
> >  [LibraryClasses.common.SEC]
> >
> >
> > PlatformSecLib|UefiCpuPkg/Library/PlatformSecLibNull/PlatformSecLibNul
> > l.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
> >
> >
> >
> > 
> >


  reply	other threads:[~2022-02-23 13:00 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 ` [edk2-devel] " Siyuan, Fu
2022-02-23 13:00   ` Li, Zhihao [this message]
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=DM6PR11MB47380AE65E1B7B5E2C53FEEEF93C9@DM6PR11MB4738.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