Hi Liming
In Ap-Relaxed mode, Bsp will not wait for all ap arrive and call the SMI 
handlers.  But some SMI handlers need all Aps arrive in smm mode such as 
SmmSetVariable. As the design, SetVariable need to let all aps arrive because 
it will write flash. Half year ago, I send the patch that calling 
SmmCpuRendezvous() before SmmSetVariable. It was reviewed but hasn't merged. 
SmmCpuRendezvous() will return immediately in traditional-AP mode.
I'm not sure what returns EFI_ACCESS_DENIED. Calling SmmCpuRendezvous() before 
SmmSetVariable is our original design but haven't implemented. 

-----Original Message-----
From: gaoliming <gaolim...@byosoft.com.cn> 
Sent: Thursday, May 18, 2023 5:38 PM
To: Li, Zhihao <zhihao...@intel.com>; devel@edk2.groups.io; Ni, Ray 
<ray...@intel.com>; kra...@redhat.com
Cc: Wang, Jian J <jian.j.w...@intel.com>
Subject: 回复: [PATCH v1 1/1] MdeModulePkg/VariableSmm.c: add Ap rendezvous check 
before SmmSetVariable.

Zhihao:
  Have you root cause this issue that SmmVariableSetVariable may return 
EFI_ACCESS_DENIED?

  I am not sure whether this fix is proper. I also add UefiCpuPkg maintainers 
Ray and Gerd in the mail loop for this discussion. 

Thanks
Liming
> -----邮件原件-----
> 发件人: Zhihao Li <zhihao...@intel.com>
> 发送时间: 2023年5月10日 18:57
> 收件人: devel@edk2.groups.io
> 抄送: Jian J Wang <jian.j.w...@intel.com>; Liming Gao 
> <gaolim...@byosoft.com.cn>
> 主题: [PATCH v1 1/1] MdeModulePkg/VariableSmm.c: add Ap rendezvous check 
> before SmmSetVariable.
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4429
> 
> For Ap-Relaxed sync mode, SmmVariableSetVariable() need to let all Aps 
> arrive to smm before it set the variable. If not, it would return 
> EFI_ACCESS_DENIED.
> 
> Cc: Jian J Wang <jian.j.w...@intel.com>
> Cc: Liming Gao <gaolim...@byosoft.com.cn>
> 
> Signed-off-by: Zhihao Li <zhihao...@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..4944903e64d4 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 - 2023, 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"
> 
> @@ -87,6 +88,13 @@ SmmVariableSetVariable (  {
> 
>    EFI_STATUS  Status;
> 
> 
> 
> +  //
> 
> +  // Need to wait for all Aps to arrive in Relaxed-AP Sync Mode
> 
> +  //
> 
> +  if (EFI_ERROR (SmmWaitForAllProcessor (TRUE))) {
> 
> +    DEBUG ((DEBUG_ERROR, "SetVariable: fail to wait for all AP check 
> + in
> SMM!\n"));
> 
> +  }
> 
> +
> 
>    //
> 
>    // Disable write protection when the calling SetVariable() through 
> EFI_SMM_VARIABLE_PROTOCOL.
> 
>    //
> 
> diff --git 
> a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
> b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf
> index 8c552b87e080..1cf0d051e6c9 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 - 2023, Intel Corporation. All rights 
> +reserved.<BR>
> 
>  # Copyright (c) Microsoft Corporation.
> 
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  #
> 
> @@ -84,6 +84,7 @@
>    VariablePolicyLib
> 
>    VariablePolicyHelperLib
> 
>    SafeIntLib
> 
> +  SmmCpuRendezvousLib
> 
> 
> 
>  [Protocols]
> 
>    gEfiSmmFirmwareVolumeBlockProtocolGuid        ## CONSUMES
> 
> diff --git
> a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.in
> f
> b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.in
> f
> index f09bed40cf51..89187456ca25 100644
> ---
> a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.in
> f
> +++
> b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableStandaloneMm.in
> f
> @@ -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 - 2023, 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 @@
>    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 (#105071): https://edk2.groups.io/g/devel/message/105071
Mute This Topic: https://groups.io/mt/99008324/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to