[edk2-devel] [PATCH v4 1/1] MdeModulePkg: Use SmmWaitForAllProcessor() in VariableSmm driver.

Li, Zhihao zhihao.li at intel.com
Mon Jun 13 06:09:14 UTC 2022


From: Zhihao Li <zhihao.li at intel.com>

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 MdePkg.

Cc: Jian J Wang <jian.j.wang at intel.com>
Cc: Liming Gao <gaoliming at byosoft.com.cn>
Cc: Ni Ray <ray.ni at intel.com>

Signed-off-by: Zhihao Li <zhihao.li at intel.com>
---
 MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c            | 10 +++++++++-
 MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf          |  3 ++-
 MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf |  3 ++-
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c
index 5253c328dcd9..265934c56a11 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/Universal/Variable/RuntimeDxe/VariableSmm.inf b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
index 8c552b87e080..e2a59d90586b 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

 #

@@ -84,6 +84,7 @@ [LibraryClasses]
   VariablePolicyLib

   VariablePolicyHelperLib

   SafeIntLib

+  SmmCpuRendezvousLib

 

 [Protocols]

   gEfiSmmFirmwareVolumeBlockProtocolGuid        ## CONSUMES

diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.inf
index f09bed40cf51..e473a12cd80e 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

@@ -80,6 +80,7 @@ [LibraryClasses]
   VariableFlashInfoLib

   VariablePolicyLib

   VariablePolicyHelperLib

+  SmmCpuRendezvousLib

 

 [Protocols]

   gEfiSmmFirmwareVolumeBlockProtocolGuid        ## CONSUMES

-- 
2.26.2.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#90473): https://edk2.groups.io/g/devel/message/90473
Mute This Topic: https://groups.io/mt/91721375/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list