public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v2 1/1] MdeModulePkg: Use SmmWaitForAllProcessor() in VariableSmm driver.
@ 2022-04-20 17:32 Li, Zhihao
  2022-04-20 18:42 ` [edk2-devel] " Michael Kubacki
  0 siblings, 1 reply; 3+ messages in thread
From: Li, Zhihao @ 2022-04-20 17:32 UTC (permalink / raw)
  To: devel
  Cc: Jian J Wang, Liming Gao, Siyuan Fu, Ni Ray, Sami Mujawar,
	Ilias Apalodimas, Ard Biesheuvel, Leif Lindholm

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3854

In UefiCpuPkg, there are a new Protocol with the new service
SmmWaitForAllProcessor(), which can be used by SMI handler
to optionally wait for other APs to complete SMM rendezvous in
relaxed AP mode.

This patch use the new service to let VariableSmm driver work
normally in relaxed AP mode.

Due to MdeModulePkg can not depend on UefiCpuPkg, use null version
implementation in MdeModulePkg.dsc.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Siyuan Fu <siyuan.fu@intel.com>
Cc: Ni Ray <ray.ni@intel.com>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>

Signed-off-by: Zhihao Li <zhihao.li@intel.com>
---
 MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.c   | 29 ++++++++++++++++++++
 MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c                 | 10 ++++++-
 MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h                       | 27 ++++++++++++++++++
 MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf | 27 ++++++++++++++++++
 MdeModulePkg/MdeModulePkg.dec                                            |  5 +++-
 MdeModulePkg/MdeModulePkg.dsc                                            |  5 +++-
 MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf               |  3 +-
 MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf      |  3 +-
 8 files changed, 104 insertions(+), 5 deletions(-)

diff --git a/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.c b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.c
new file mode 100644
index 000000000000..474195bbb374
--- /dev/null
+++ b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.c
@@ -0,0 +1,29 @@
+/** @file
+  SMM CPU Rendezvous sevice implement.
+
+  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/DebugLib.h>
+#include <Library/SmmCpuRendezvousLib.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 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
+  )
+{
+  ASSERT (FALSE);
+  return EFI_SUCCESS;
+}
diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
index 517cae7b00f8..52a9b0e6b202 100644
--- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
+++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
@@ -14,7 +14,7 @@
   VariableServiceSetVariable(), VariableServiceQueryVariableInfo(), ReclaimForOS(),
   SmmVariableGetStatistics() should also do validation based on its own knowledge.
 
-Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2010 - 2022, Intel Corporation. All rights reserved.<BR>
 Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -28,6 +28,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 
 #include <Library/MmServicesTableLib.h>
 #include <Library/VariablePolicyLib.h>
+#include <Library/SmmCpuRendezvousLib.h>
 
 #include <Guid/SmmVariableCommon.h>
 #include "Variable.h"
@@ -656,6 +657,13 @@ SmmVariableHandler (
         goto EXIT;
       }
 
+      if ((SmmVariableHeader->Attributes & EFI_VARIABLE_NON_VOLATILE) != 0) {
+        if (EFI_ERROR (SmmWaitForAllProcessor (TRUE))) {
+          DEBUG ((DEBUG_ERROR, "SetVariable: fail to wait for all AP check in SMM!\n"));
+          goto EXIT;
+        }
+      }
+
       Status = VariableServiceSetVariable (
                  SmmVariableHeader->Name,
                  &SmmVariableHeader->Guid,
diff --git a/MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h b/MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h
new file mode 100644
index 000000000000..82e459e9106e
--- /dev/null
+++ b/MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h
@@ -0,0 +1,27 @@
+/** @file
+  SMM CPU Rendezvous library header file.
+
+  Copyright (c) 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/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
new file mode 100644
index 000000000000..0bd4f39e7277
--- /dev/null
+++ b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
@@ -0,0 +1,27 @@
+## @file
+# SMM CPU Rendezvous service lib.
+#
+# This is SMM CPU rendezvous service lib that wait for all
+# APs to enter SMM mode.
+#
+# Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = SmmCpuRendezvousLibNull
+  FILE_GUID                      = 1e5790ea-d013-4d7b-9047-b4342a762027
+  MODULE_TYPE                    = DXE_SMM_DRIVER
+  LIBRARY_CLASS                  = SmmCpuRendezvousLib|MM_STANDALONE DXE_SMM_DRIVER
+
+[Sources]
+  SmmCpuRendezvousLibNull.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+  DebugLib
diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
index 463e889e9a68..06ada41b7344 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -4,7 +4,7 @@
 # and libraries instances, which are used for those modules.
 #
 # Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
-# Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2007 - 2022, Intel Corporation. All rights reserved.<BR>
 # Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
 # (C) Copyright 2016 - 2019 Hewlett Packard Enterprise Development LP<BR>
 # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
@@ -154,6 +154,9 @@
   #
   VariablePolicyHelperLib|Include/Library/VariablePolicyHelperLib.h
 
+  ## @libraryclass  Provides function for SMM CPU Rendezvous Library.
+  SmmCpuRendezvousLib|Include/Library/SmmCpuRendezvousLib.h
+
 [Guids]
   ## MdeModule package token space guid
   # Include/Guid/MdeModulePkgTokenSpace.h
diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc
index b1d83461865e..4580320a7230 100644
--- a/MdeModulePkg/MdeModulePkg.dsc
+++ b/MdeModulePkg/MdeModulePkg.dsc
@@ -2,7 +2,7 @@
 # EFI/PI Reference Module Package for All Architectures
 #
 # (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
-# Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2007 - 2022, Intel Corporation. All rights reserved.<BR>
 # Copyright (c) Microsoft Corporation.
 #
 #    SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -152,6 +152,7 @@
   SmmServicesTableLib|MdePkg/Library/SmmServicesTableLib/SmmServicesTableLib.inf
   LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf
   SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf
+  SmmCpuRendezvousLib|MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
 
 [LibraryClasses.common.UEFI_DRIVER]
   HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
@@ -172,6 +173,7 @@
   MmServicesTableLib|MdePkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.inf
   LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxStandaloneMmLib.inf
   MemLib|StandaloneMmPkg/Library/StandaloneMmMemLib/StandaloneMmMemLib.inf
+  SmmCpuRendezvousLib|MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
 
 [LibraryClasses.ARM, LibraryClasses.AARCH64]
   ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
@@ -459,6 +461,7 @@
   MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf
   MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
 !endif
+  MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
 
 [Components.IA32, Components.X64]
   MdeModulePkg/Universal/DebugSupportDxe/DebugSupportDxe.inf
diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
index eaa97a01c6e5..0bebd92b1626 100644
--- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
+++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
@@ -18,7 +18,7 @@
 #  may not be modified without authorization. If platform fails to protect these resources,
 #  the authentication service provided in this driver will be broken, and the behavior is undefined.
 #
-# Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2010 - 2022, Intel Corporation. All rights reserved.<BR>
 # Copyright (c) Microsoft Corporation.
 # SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -82,6 +82,7 @@
   UefiBootServicesTableLib
   VariablePolicyLib
   VariablePolicyHelperLib
+  SmmCpuRendezvousLib
 
 [Protocols]
   gEfiSmmFirmwareVolumeBlockProtocolGuid        ## CONSUMES
diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
index d8c4f77e7f1f..595baaf70164 100644
--- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
+++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
@@ -18,7 +18,7 @@
 #  may not be modified without authorization. If platform fails to protect these resources,
 #  the authentication service provided in this driver will be broken, and the behavior is undefined.
 #
-# Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2010 - 2022, Intel Corporation. All rights reserved.<BR>
 # Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR>
 # Copyright (c) Microsoft Corporation.
 # SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -78,6 +78,7 @@
   VarCheckLib
   VariablePolicyLib
   VariablePolicyHelperLib
+  SmmCpuRendezvousLib
 
 [Protocols]
   gEfiSmmFirmwareVolumeBlockProtocolGuid        ## CONSUMES
-- 
2.26.2.windows.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [edk2-devel] [PATCH v2 1/1] MdeModulePkg: Use SmmWaitForAllProcessor() in VariableSmm driver.
  2022-04-20 17:32 [PATCH v2 1/1] MdeModulePkg: Use SmmWaitForAllProcessor() in VariableSmm driver Li, Zhihao
@ 2022-04-20 18:42 ` Michael Kubacki
  2022-04-21  7:22   ` Li, Zhihao
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Kubacki @ 2022-04-20 18:42 UTC (permalink / raw)
  To: devel, zhihao.li
  Cc: Jian J Wang, Liming Gao, Siyuan Fu, Ni Ray, Sami Mujawar,
	Ilias Apalodimas, Ard Biesheuvel, Leif Lindholm

If I understand this patch correctly, it is exactly duplicating the 
SmmCpuRendezvousLib library class/interface in ModeModulePkg because 
code there cannot depend on the library class/interface definition 
currently in UefiCpuPkg:

https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h

If that's the case, this is creating maintenance debt by requiring the 
two interfaces always be kept in sync and developer confusion.

It is okay to have an interface defined in a more broadly scoped package 
(e.g. MdePkg) with instances implemented in other packages.

For example, the HobLib interface is defined in MdePkg:

https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Library/HobLib.h

But, instances are described in many other packages including a NULL 
instance in MdeModulePkg:

https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf

And a Standalone MM instance in StandaloneMmPkg:

https://github.com/tianocore/edk2/blob/master/StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf

If this interface is actually consumed by MdeModulePkg, the interface 
should be defined in a single package that is allowed to be a dependency 
for MdeModulePkg. The NULL library instance referenced in the 
MdeModulePkg build should also be implemented in an allowed package.

The library interface should be removed from other packages 
(UefiCpuPkg). Other library instances can then be implemented elsewhere 
using the library class interface from the singly defined location.

Regards,
Michael

On 4/20/2022 1:32 PM, Li, Zhihao wrote:
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3854
> 
> In UefiCpuPkg, there are a new Protocol with the new service
> SmmWaitForAllProcessor(), which can be used by SMI handler
> to optionally wait for other APs to complete SMM rendezvous in
> relaxed AP mode.
> 
> This patch use the new service to let VariableSmm driver work
> normally in relaxed AP mode.
> 
> Due to MdeModulePkg can not depend on UefiCpuPkg, use null version
> implementation in MdeModulePkg.dsc.
> 
> Cc: Jian J Wang <jian.j.wang@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Siyuan Fu <siyuan.fu@intel.com>
> Cc: Ni Ray <ray.ni@intel.com>
> Cc: Sami Mujawar <sami.mujawar@arm.com>
> Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
> Cc: Leif Lindholm <quic_llindhol@quicinc.com>
> 
> Signed-off-by: Zhihao Li <zhihao.li@intel.com>
> ---
>   MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.c   | 29 ++++++++++++++++++++
>   MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c                 | 10 ++++++-
>   MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h                       | 27 ++++++++++++++++++
>   MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf | 27 ++++++++++++++++++
>   MdeModulePkg/MdeModulePkg.dec                                            |  5 +++-
>   MdeModulePkg/MdeModulePkg.dsc                                            |  5 +++-
>   MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf               |  3 +-
>   MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf      |  3 +-
>   8 files changed, 104 insertions(+), 5 deletions(-)
> 
> diff --git a/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.c b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.c
> new file mode 100644
> index 000000000000..474195bbb374
> --- /dev/null
> +++ b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.c
> @@ -0,0 +1,29 @@
> +/** @file
> 
> +  SMM CPU Rendezvous sevice implement.
> 
> +
> 
> +  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/SmmCpuRendezvousLib.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 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
> 
> +  )
> 
> +{
> 
> +  ASSERT (FALSE);
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
> index 517cae7b00f8..52a9b0e6b202 100644
> --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
> +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
> @@ -14,7 +14,7 @@
>     VariableServiceSetVariable(), VariableServiceQueryVariableInfo(), ReclaimForOS(),
> 
>     SmmVariableGetStatistics() should also do validation based on its own knowledge.
> 
>   
> 
> -Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
> 
> +Copyright (c) 2010 - 2022, Intel Corporation. All rights reserved.<BR>
> 
>   Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR>
> 
>   SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>   
> 
> @@ -28,6 +28,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
>   
> 
>   #include <Library/MmServicesTableLib.h>
> 
>   #include <Library/VariablePolicyLib.h>
> 
> +#include <Library/SmmCpuRendezvousLib.h>
> 
>   
> 
>   #include <Guid/SmmVariableCommon.h>
> 
>   #include "Variable.h"
> 
> @@ -656,6 +657,13 @@ SmmVariableHandler (
>           goto EXIT;
> 
>         }
> 
>   
> 
> +      if ((SmmVariableHeader->Attributes & EFI_VARIABLE_NON_VOLATILE) != 0) {
> 
> +        if (EFI_ERROR (SmmWaitForAllProcessor (TRUE))) {
> 
> +          DEBUG ((DEBUG_ERROR, "SetVariable: fail to wait for all AP check in SMM!\n"));
> 
> +          goto EXIT;
> 
> +        }
> 
> +      }
> 
> +
> 
>         Status = VariableServiceSetVariable (
> 
>                    SmmVariableHeader->Name,
> 
>                    &SmmVariableHeader->Guid,
> 
> diff --git a/MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h b/MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h
> new file mode 100644
> index 000000000000..82e459e9106e
> --- /dev/null
> +++ b/MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h
> @@ -0,0 +1,27 @@
> +/** @file
> 
> +  SMM CPU Rendezvous library header file.
> 
> +
> 
> +  Copyright (c) 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/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
> new file mode 100644
> index 000000000000..0bd4f39e7277
> --- /dev/null
> +++ b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
> @@ -0,0 +1,27 @@
> +## @file
> 
> +# SMM CPU Rendezvous service lib.
> 
> +#
> 
> +# This is SMM CPU rendezvous service lib that wait for all
> 
> +# APs to enter SMM mode.
> 
> +#
> 
> +# Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010005
> 
> +  BASE_NAME                      = SmmCpuRendezvousLibNull
> 
> +  FILE_GUID                      = 1e5790ea-d013-4d7b-9047-b4342a762027
> 
> +  MODULE_TYPE                    = DXE_SMM_DRIVER
> 
> +  LIBRARY_CLASS                  = SmmCpuRendezvousLib|MM_STANDALONE DXE_SMM_DRIVER
> 
> +
> 
> +[Sources]
> 
> +  SmmCpuRendezvousLibNull.c
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  MdeModulePkg/MdeModulePkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  DebugLib
> 
> diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
> index 463e889e9a68..06ada41b7344 100644
> --- a/MdeModulePkg/MdeModulePkg.dec
> +++ b/MdeModulePkg/MdeModulePkg.dec
> @@ -4,7 +4,7 @@
>   # and libraries instances, which are used for those modules.
> 
>   #
> 
>   # Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
> 
> -# Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>
> 
> +# Copyright (c) 2007 - 2022, Intel Corporation. All rights reserved.<BR>
> 
>   # Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
> 
>   # (C) Copyright 2016 - 2019 Hewlett Packard Enterprise Development LP<BR>
> 
>   # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
> 
> @@ -154,6 +154,9 @@
>     #
> 
>     VariablePolicyHelperLib|Include/Library/VariablePolicyHelperLib.h
> 
>   
> 
> +  ## @libraryclass  Provides function for SMM CPU Rendezvous Library.
> 
> +  SmmCpuRendezvousLib|Include/Library/SmmCpuRendezvousLib.h
> 
> +
> 
>   [Guids]
> 
>     ## MdeModule package token space guid
> 
>     # Include/Guid/MdeModulePkgTokenSpace.h
> 
> diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc
> index b1d83461865e..4580320a7230 100644
> --- a/MdeModulePkg/MdeModulePkg.dsc
> +++ b/MdeModulePkg/MdeModulePkg.dsc
> @@ -2,7 +2,7 @@
>   # EFI/PI Reference Module Package for All Architectures
> 
>   #
> 
>   # (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
> 
> -# Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>
> 
> +# Copyright (c) 2007 - 2022, Intel Corporation. All rights reserved.<BR>
> 
>   # Copyright (c) Microsoft Corporation.
> 
>   #
> 
>   #    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> @@ -152,6 +152,7 @@
>     SmmServicesTableLib|MdePkg/Library/SmmServicesTableLib/SmmServicesTableLib.inf
> 
>     LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf
> 
>     SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf
> 
> +  SmmCpuRendezvousLib|MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
> 
>   
> 
>   [LibraryClasses.common.UEFI_DRIVER]
> 
>     HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
> 
> @@ -172,6 +173,7 @@
>     MmServicesTableLib|MdePkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.inf
> 
>     LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxStandaloneMmLib.inf
> 
>     MemLib|StandaloneMmPkg/Library/StandaloneMmMemLib/StandaloneMmMemLib.inf
> 
> +  SmmCpuRendezvousLib|MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
> 
>   
> 
>   [LibraryClasses.ARM, LibraryClasses.AARCH64]
> 
>     ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
> 
> @@ -459,6 +461,7 @@
>     MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandaloneMm.inf
> 
>     MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
> 
>   !endif
> 
> +  MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
> 
>   
> 
>   [Components.IA32, Components.X64]
> 
>     MdeModulePkg/Universal/DebugSupportDxe/DebugSupportDxe.inf
> 
> diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
> index eaa97a01c6e5..0bebd92b1626 100644
> --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
> +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
> @@ -18,7 +18,7 @@
>   #  may not be modified without authorization. If platform fails to protect these resources,
> 
>   #  the authentication service provided in this driver will be broken, and the behavior is undefined.
> 
>   #
> 
> -# Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
> 
> +# Copyright (c) 2010 - 2022, Intel Corporation. All rights reserved.<BR>
> 
>   # Copyright (c) Microsoft Corporation.
> 
>   # SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>   #
> 
> @@ -82,6 +82,7 @@
>     UefiBootServicesTableLib
> 
>     VariablePolicyLib
> 
>     VariablePolicyHelperLib
> 
> +  SmmCpuRendezvousLib
> 
>   
> 
>   [Protocols]
> 
>     gEfiSmmFirmwareVolumeBlockProtocolGuid        ## CONSUMES
> 
> diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
> index d8c4f77e7f1f..595baaf70164 100644
> --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
> +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
> @@ -18,7 +18,7 @@
>   #  may not be modified without authorization. If platform fails to protect these resources,
> 
>   #  the authentication service provided in this driver will be broken, and the behavior is undefined.
> 
>   #
> 
> -# Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
> 
> +# Copyright (c) 2010 - 2022, Intel Corporation. All rights reserved.<BR>
> 
>   # Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR>
> 
>   # Copyright (c) Microsoft Corporation.
> 
>   # SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> @@ -78,6 +78,7 @@
>     VarCheckLib
> 
>     VariablePolicyLib
> 
>     VariablePolicyHelperLib
> 
> +  SmmCpuRendezvousLib
> 
>   
> 
>   [Protocols]
> 
>     gEfiSmmFirmwareVolumeBlockProtocolGuid        ## CONSUMES
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [edk2-devel] [PATCH v2 1/1] MdeModulePkg: Use SmmWaitForAllProcessor() in VariableSmm driver.
  2022-04-20 18:42 ` [edk2-devel] " Michael Kubacki
@ 2022-04-21  7:22   ` Li, Zhihao
  0 siblings, 0 replies; 3+ messages in thread
From: Li, Zhihao @ 2022-04-21  7:22 UTC (permalink / raw)
  To: Michael Kubacki, devel@edk2.groups.io
  Cc: Wang, Jian J, Gao, Liming, Fu, Siyuan, Ni, Ray, Sami Mujawar,
	Ilias Apalodimas, Ard Biesheuvel, Leif Lindholm

Thank you for your comment.

I will move the SmmCpuRendezvousLib.h file and NullLib implementation to MdePkg.

Thanks
Zhihao


-----Original Message-----
From: Michael Kubacki <mikuback@linux.microsoft.com> 
Sent: Thursday, April 21, 2022 2:42 AM
To: devel@edk2.groups.io; Li, Zhihao <zhihao.li@intel.com>
Cc: Wang, Jian J <jian.j.wang@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>; Fu, Siyuan <siyuan.fu@intel.com>; Ni, Ray <ray.ni@intel.com>; Sami Mujawar <sami.mujawar@arm.com>; Ilias Apalodimas <ilias.apalodimas@linaro.org>; Ard Biesheuvel <ardb+tianocore@kernel.org>; Leif Lindholm <quic_llindhol@quicinc.com>
Subject: Re: [edk2-devel] [PATCH v2 1/1] MdeModulePkg: Use SmmWaitForAllProcessor() in VariableSmm driver.

If I understand this patch correctly, it is exactly duplicating the SmmCpuRendezvousLib library class/interface in ModeModulePkg because code there cannot depend on the library class/interface definition currently in UefiCpuPkg:

https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h

If that's the case, this is creating maintenance debt by requiring the two interfaces always be kept in sync and developer confusion.

It is okay to have an interface defined in a more broadly scoped package (e.g. MdePkg) with instances implemented in other packages.

For example, the HobLib interface is defined in MdePkg:

https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Library/HobLib.h

But, instances are described in many other packages including a NULL instance in MdeModulePkg:

https://github.com/tianocore/edk2/blob/master/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf

And a Standalone MM instance in StandaloneMmPkg:

https://github.com/tianocore/edk2/blob/master/StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.inf

If this interface is actually consumed by MdeModulePkg, the interface should be defined in a single package that is allowed to be a dependency for MdeModulePkg. The NULL library instance referenced in the MdeModulePkg build should also be implemented in an allowed package.

The library interface should be removed from other packages (UefiCpuPkg). Other library instances can then be implemented elsewhere using the library class interface from the singly defined location.

Regards,
Michael

On 4/20/2022 1:32 PM, Li, Zhihao wrote:
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3854
> 
> In UefiCpuPkg, there are a new Protocol with the new service 
> SmmWaitForAllProcessor(), which can be used by SMI handler to 
> optionally wait for other APs to complete SMM rendezvous in relaxed AP 
> mode.
> 
> This patch use the new service to let VariableSmm driver work normally 
> in relaxed AP mode.
> 
> Due to MdeModulePkg can not depend on UefiCpuPkg, use null version 
> implementation in MdeModulePkg.dsc.
> 
> Cc: Jian J Wang <jian.j.wang@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Siyuan Fu <siyuan.fu@intel.com>
> Cc: Ni Ray <ray.ni@intel.com>
> Cc: Sami Mujawar <sami.mujawar@arm.com>
> Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
> Cc: Leif Lindholm <quic_llindhol@quicinc.com>
> 
> Signed-off-by: Zhihao Li <zhihao.li@intel.com>
> ---
>   MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.c   | 29 ++++++++++++++++++++
>   MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c                 | 10 ++++++-
>   MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h                       | 27 ++++++++++++++++++
>   MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf | 27 ++++++++++++++++++
>   MdeModulePkg/MdeModulePkg.dec                                            |  5 +++-
>   MdeModulePkg/MdeModulePkg.dsc                                            |  5 +++-
>   MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf               |  3 +-
>   MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf      |  3 +-
>   8 files changed, 104 insertions(+), 5 deletions(-)
> 
> diff --git 
> a/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull
> .c 
> b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull
> .c
> new file mode 100644
> index 000000000000..474195bbb374
> --- /dev/null
> +++ b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLib
> +++ Null.c
> @@ -0,0 +1,29 @@
> +/** @file
> 
> +  SMM CPU Rendezvous sevice implement.
> 
> +
> 
> +  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +
> 
> +**/
> 
> +
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/SmmCpuRendezvousLib.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 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
> 
> +  )
> 
> +{
> 
> +  ASSERT (FALSE);
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c 
> b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
> index 517cae7b00f8..52a9b0e6b202 100644
> --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
> +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
> @@ -14,7 +14,7 @@
>     VariableServiceSetVariable(), VariableServiceQueryVariableInfo(), 
> ReclaimForOS(),
> 
>     SmmVariableGetStatistics() should also do validation based on its own knowledge.
> 
>   
> 
> -Copyright (c) 2010 - 2019, Intel Corporation. All rights 
> reserved.<BR>
> 
> +Copyright (c) 2010 - 2022, Intel Corporation. All rights 
> +reserved.<BR>
> 
>   Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR>
> 
>   SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>   
> 
> @@ -28,6 +28,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
>   
> 
>   #include <Library/MmServicesTableLib.h>
> 
>   #include <Library/VariablePolicyLib.h>
> 
> +#include <Library/SmmCpuRendezvousLib.h>
> 
>   
> 
>   #include <Guid/SmmVariableCommon.h>
> 
>   #include "Variable.h"
> 
> @@ -656,6 +657,13 @@ SmmVariableHandler (
>           goto EXIT;
> 
>         }
> 
>   
> 
> +      if ((SmmVariableHeader->Attributes & EFI_VARIABLE_NON_VOLATILE) 
> + != 0) {
> 
> +        if (EFI_ERROR (SmmWaitForAllProcessor (TRUE))) {
> 
> +          DEBUG ((DEBUG_ERROR, "SetVariable: fail to wait for all AP 
> + check in SMM!\n"));
> 
> +          goto EXIT;
> 
> +        }
> 
> +      }
> 
> +
> 
>         Status = VariableServiceSetVariable (
> 
>                    SmmVariableHeader->Name,
> 
>                    &SmmVariableHeader->Guid,
> 
> diff --git a/MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h 
> b/MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h
> new file mode 100644
> index 000000000000..82e459e9106e
> --- /dev/null
> +++ b/MdeModulePkg/Include/Library/SmmCpuRendezvousLib.h
> @@ -0,0 +1,27 @@
> +/** @file
> 
> +  SMM CPU Rendezvous library header file.
> 
> +
> 
> +  Copyright (c) 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/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull
> .inf 
> b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull
> .inf
> new file mode 100644
> index 000000000000..0bd4f39e7277
> --- /dev/null
> +++ b/MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLib
> +++ Null.inf
> @@ -0,0 +1,27 @@
> +## @file
> 
> +# SMM CPU Rendezvous service lib.
> 
> +#
> 
> +# This is SMM CPU rendezvous service lib that wait for all
> 
> +# APs to enter SMM mode.
> 
> +#
> 
> +# Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
> 
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010005
> 
> +  BASE_NAME                      = SmmCpuRendezvousLibNull
> 
> +  FILE_GUID                      = 1e5790ea-d013-4d7b-9047-b4342a762027
> 
> +  MODULE_TYPE                    = DXE_SMM_DRIVER
> 
> +  LIBRARY_CLASS                  = SmmCpuRendezvousLib|MM_STANDALONE DXE_SMM_DRIVER
> 
> +
> 
> +[Sources]
> 
> +  SmmCpuRendezvousLibNull.c
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  MdeModulePkg/MdeModulePkg.dec
> 
> +
> 
> +[LibraryClasses]
> 
> +  DebugLib
> 
> diff --git a/MdeModulePkg/MdeModulePkg.dec 
> b/MdeModulePkg/MdeModulePkg.dec index 463e889e9a68..06ada41b7344 
> 100644
> --- a/MdeModulePkg/MdeModulePkg.dec
> +++ b/MdeModulePkg/MdeModulePkg.dec
> @@ -4,7 +4,7 @@
>   # and libraries instances, which are used for those modules.
> 
>   #
> 
>   # Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
> 
> -# Copyright (c) 2007 - 2021, Intel Corporation. All rights 
> reserved.<BR>
> 
> +# Copyright (c) 2007 - 2022, Intel Corporation. All rights 
> +reserved.<BR>
> 
>   # Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
> 
>   # (C) Copyright 2016 - 2019 Hewlett Packard Enterprise Development 
> LP<BR>
> 
>   # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
> 
> @@ -154,6 +154,9 @@
>     #
> 
>     VariablePolicyHelperLib|Include/Library/VariablePolicyHelperLib.h
> 
>   
> 
> +  ## @libraryclass  Provides function for SMM CPU Rendezvous Library.
> 
> +  SmmCpuRendezvousLib|Include/Library/SmmCpuRendezvousLib.h
> 
> +
> 
>   [Guids]
> 
>     ## MdeModule package token space guid
> 
>     # Include/Guid/MdeModulePkgTokenSpace.h
> 
> diff --git a/MdeModulePkg/MdeModulePkg.dsc 
> b/MdeModulePkg/MdeModulePkg.dsc index b1d83461865e..4580320a7230 
> 100644
> --- a/MdeModulePkg/MdeModulePkg.dsc
> +++ b/MdeModulePkg/MdeModulePkg.dsc
> @@ -2,7 +2,7 @@
>   # EFI/PI Reference Module Package for All Architectures
> 
>   #
> 
>   # (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
> 
> -# Copyright (c) 2007 - 2021, Intel Corporation. All rights 
> reserved.<BR>
> 
> +# Copyright (c) 2007 - 2022, Intel Corporation. All rights 
> +reserved.<BR>
> 
>   # Copyright (c) Microsoft Corporation.
> 
>   #
> 
>   #    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> @@ -152,6 +152,7 @@
>     
> SmmServicesTableLib|MdePkg/Library/SmmServicesTableLib/SmmServicesTabl
> eLib.inf
> 
>     LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf
> 
>     SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf
> 
> +  
> + SmmCpuRendezvousLib|MdeModulePkg/Library/SmmCpuRendezvousLibNull/Smm
> + CpuRendezvousLibNull.inf
> 
>   
> 
>   [LibraryClasses.common.UEFI_DRIVER]
> 
>     HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
> 
> @@ -172,6 +173,7 @@
>     
> MmServicesTableLib|MdePkg/Library/StandaloneMmServicesTableLib/Standal
> oneMmServicesTableLib.inf
> 
>     
> LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxStandaloneMmLi
> b.inf
> 
>     
> MemLib|StandaloneMmPkg/Library/StandaloneMmMemLib/StandaloneMmMemLib.i
> nf
> 
> +  
> + SmmCpuRendezvousLib|MdeModulePkg/Library/SmmCpuRendezvousLibNull/Smm
> + CpuRendezvousLibNull.inf
> 
>   
> 
>   [LibraryClasses.ARM, LibraryClasses.AARCH64]
> 
>     ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
> 
> @@ -459,6 +461,7 @@
>     
> MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteStandal
> oneMm.inf
> 
>     
> MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
> 
>   !endif
> 
> +  
> + MdeModulePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull
> + .inf
> 
>   
> 
>   [Components.IA32, Components.X64]
> 
>     MdeModulePkg/Universal/DebugSupportDxe/DebugSupportDxe.inf
> 
> diff --git 
> a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf 
> b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
> index eaa97a01c6e5..0bebd92b1626 100644
> --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
> +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
> @@ -18,7 +18,7 @@
>   #  may not be modified without authorization. If platform fails to 
> protect these resources,
> 
>   #  the authentication service provided in this driver will be broken, and the behavior is undefined.
> 
>   #
> 
> -# Copyright (c) 2010 - 2019, Intel Corporation. All rights 
> reserved.<BR>
> 
> +# Copyright (c) 2010 - 2022, Intel Corporation. All rights 
> +reserved.<BR>
> 
>   # Copyright (c) Microsoft Corporation.
> 
>   # SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>   #
> 
> @@ -82,6 +82,7 @@
>     UefiBootServicesTableLib
> 
>     VariablePolicyLib
> 
>     VariablePolicyHelperLib
> 
> +  SmmCpuRendezvousLib
> 
>   
> 
>   [Protocols]
> 
>     gEfiSmmFirmwareVolumeBlockProtocolGuid        ## CONSUMES
> 
> diff --git 
> a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf 
> b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
> index d8c4f77e7f1f..595baaf70164 100644
> --- 
> a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
> +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.
> +++ inf
> @@ -18,7 +18,7 @@
>   #  may not be modified without authorization. If platform fails to 
> protect these resources,
> 
>   #  the authentication service provided in this driver will be broken, and the behavior is undefined.
> 
>   #
> 
> -# Copyright (c) 2010 - 2019, Intel Corporation. All rights 
> reserved.<BR>
> 
> +# Copyright (c) 2010 - 2022, Intel Corporation. All rights 
> +reserved.<BR>
> 
>   # Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR>
> 
>   # Copyright (c) Microsoft Corporation.
> 
>   # SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> @@ -78,6 +78,7 @@
>     VarCheckLib
> 
>     VariablePolicyLib
> 
>     VariablePolicyHelperLib
> 
> +  SmmCpuRendezvousLib
> 
>   
> 
>   [Protocols]
> 
>     gEfiSmmFirmwareVolumeBlockProtocolGuid        ## CONSUMES
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-04-21  7:23 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-20 17:32 [PATCH v2 1/1] MdeModulePkg: Use SmmWaitForAllProcessor() in VariableSmm driver Li, Zhihao
2022-04-20 18:42 ` [edk2-devel] " Michael Kubacki
2022-04-21  7:22   ` Li, Zhihao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox