[edk2-devel] [Patch V3] UefiCpuPkg: Decouple the SEV-ES functionality.

Yuanhao Xie posted 1 patch 9 months, 1 week ago
Failed in applying to current master (apply log)
UefiCpuPkg/Library/MpInitLib/MpLib.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
[edk2-devel] [Patch V3] UefiCpuPkg: Decouple the SEV-ES functionality.
Posted by Yuanhao Xie 9 months, 1 week ago
The purpose is to fix an issue where an exception occurs at the start
of the DXE phase by applying the following patch series on INTEL-based
systems.

UefiCpuPkg: Refactor the logic for placing APs in HltLoop.
UefiCpuPkg: Refactor the logic for placing APs in Mwait/Runloop.
UefiCpuPkg: Create MpHandOff.
UefiCpuPkg: ApWakeupFunction directly use CpuMpData.
UefiCpuPkg: Eliminate the second INIT-SIPI-SIPI sequence.

This series of patches makes changes to the way the APs are
initialized and woken up. It removes the 2nd time INIT-SIPI-SIPI and
introduces a special startup signal to wake up APs. These patches also
create a new HOB identified by the mMpHandOffGuid, which stores only the
 minimum information required from the PEI phase to the DXE phase.
As a result, the original HOB (mCpuInitMpLibHobGuid) is now used only
as a global variable in the PEI phase and is no longer necessary in the
DXE phase for INTEL-based systems. The AMD SEV-ES related code
still relies on the OldCpuMpData in the DXE phase.

This patch decouple the SEV-ES functionality of assigning CpuMpData to
OldCpuMpData->NewCpuMpData from the Intel logic.

Cc: Eric Dong <eric.dong@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
---
 UefiCpuPkg/Library/MpInitLib/MpLib.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c
index 737e03ffc5..e7054adbcc 100644
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.c
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c
@@ -2160,7 +2160,10 @@ MpInitLibInitialize (
     // APs have been wakeup before, just get the CPU Information
     // from HOB
     //
-    AmdSevUpdateCpuMpData (CpuMpData);
+    if (CpuMpData->UseSevEsAPMethod) {
+      AmdSevUpdateCpuMpData (CpuMpData);
+    }
+
     CpuMpData->CpuCount  = MpHandOff->CpuCount;
     CpuMpData->BspNumber = GetBspNumber (MpHandOff);
     CpuInfoInHob         = (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoInHob;
-- 
2.36.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#107264): https://edk2.groups.io/g/devel/message/107264
Mute This Topic: https://groups.io/mt/100366586/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [Patch V3] UefiCpuPkg: Decouple the SEV-ES functionality.
Posted by Lendacky, Thomas via groups.io 9 months, 1 week ago
On 7/26/23 02:51, YuanhaoXie wrote:
> The purpose is to fix an issue where an exception occurs at the start
> of the DXE phase by applying the following patch series on INTEL-based
> systems.
> 
> UefiCpuPkg: Refactor the logic for placing APs in HltLoop.
> UefiCpuPkg: Refactor the logic for placing APs in Mwait/Runloop.
> UefiCpuPkg: Create MpHandOff.
> UefiCpuPkg: ApWakeupFunction directly use CpuMpData.
> UefiCpuPkg: Eliminate the second INIT-SIPI-SIPI sequence.
> 
> This series of patches makes changes to the way the APs are
> initialized and woken up. It removes the 2nd time INIT-SIPI-SIPI and
> introduces a special startup signal to wake up APs. These patches also
> create a new HOB identified by the mMpHandOffGuid, which stores only the
>   minimum information required from the PEI phase to the DXE phase.
> As a result, the original HOB (mCpuInitMpLibHobGuid) is now used only
> as a global variable in the PEI phase and is no longer necessary in the
> DXE phase for INTEL-based systems. The AMD SEV-ES related code
> still relies on the OldCpuMpData in the DXE phase.
> 
> This patch decouple the SEV-ES functionality of assigning CpuMpData to
> OldCpuMpData->NewCpuMpData from the Intel logic.
> 
> Cc: Eric Dong <eric.dong@intel.com>
> Cc: Rahul Kumar <rahul1.kumar@intel.com>
> Cc: Tom Lendacky <thomas.lendacky@amd.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
> ---
>   UefiCpuPkg/Library/MpInitLib/MpLib.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c
> index 737e03ffc5..e7054adbcc 100644
> --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c
> +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c
> @@ -2160,7 +2160,10 @@ MpInitLibInitialize (
>       // APs have been wakeup before, just get the CPU Information
>       // from HOB
>       //
> -    AmdSevUpdateCpuMpData (CpuMpData);
> +    if (CpuMpData->UseSevEsAPMethod) {
> +      AmdSevUpdateCpuMpData (CpuMpData);
> +    }

This looks fine. Applying this patch did not regress SEV-ES or SEV-SNP 
guest boots.

Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>

Thanks,
Tom

> +
>       CpuMpData->CpuCount  = MpHandOff->CpuCount;
>       CpuMpData->BspNumber = GetBspNumber (MpHandOff);
>       CpuInfoInHob         = (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoInHob;


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#107270): https://edk2.groups.io/g/devel/message/107270
Mute This Topic: https://groups.io/mt/100366586/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Re: [edk2-devel] [Patch V3] UefiCpuPkg: Decouple the SEV-ES functionality.
Posted by Ni, Ray 9 months, 1 week ago
Reviewed-by: Ray Ni <ray.ni@intel.com>

@Tom Lendacky, can you please comment?

> -----Original Message-----
> From: Xie, Yuanhao <yuanhao.xie@intel.com>
> Sent: Wednesday, July 26, 2023 3:51 PM
> To: devel@edk2.groups.io
> Cc: Dong, Eric <eric.dong@intel.com>; Kumar, Rahul R
> <rahul.r.kumar@intel.com>; Tom Lendacky <thomas.lendacky@amd.com>; Ni,
> Ray <ray.ni@intel.com>; Xie, Yuanhao <yuanhao.xie@intel.com>
> Subject: [Patch V3] UefiCpuPkg: Decouple the SEV-ES functionality.
> 
> The purpose is to fix an issue where an exception occurs at the start
> of the DXE phase by applying the following patch series on INTEL-based
> systems.
> 
> UefiCpuPkg: Refactor the logic for placing APs in HltLoop.
> UefiCpuPkg: Refactor the logic for placing APs in Mwait/Runloop.
> UefiCpuPkg: Create MpHandOff.
> UefiCpuPkg: ApWakeupFunction directly use CpuMpData.
> UefiCpuPkg: Eliminate the second INIT-SIPI-SIPI sequence.
> 
> This series of patches makes changes to the way the APs are
> initialized and woken up. It removes the 2nd time INIT-SIPI-SIPI and
> introduces a special startup signal to wake up APs. These patches also
> create a new HOB identified by the mMpHandOffGuid, which stores only the
>  minimum information required from the PEI phase to the DXE phase.
> As a result, the original HOB (mCpuInitMpLibHobGuid) is now used only
> as a global variable in the PEI phase and is no longer necessary in the
> DXE phase for INTEL-based systems. The AMD SEV-ES related code
> still relies on the OldCpuMpData in the DXE phase.
> 
> This patch decouple the SEV-ES functionality of assigning CpuMpData to
> OldCpuMpData->NewCpuMpData from the Intel logic.
> 
> Cc: Eric Dong <eric.dong@intel.com>
> Cc: Rahul Kumar <rahul1.kumar@intel.com>
> Cc: Tom Lendacky <thomas.lendacky@amd.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
> ---
>  UefiCpuPkg/Library/MpInitLib/MpLib.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c
> b/UefiCpuPkg/Library/MpInitLib/MpLib.c
> index 737e03ffc5..e7054adbcc 100644
> --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c
> +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c
> @@ -2160,7 +2160,10 @@ MpInitLibInitialize (
>      // APs have been wakeup before, just get the CPU Information
>      // from HOB
>      //
> -    AmdSevUpdateCpuMpData (CpuMpData);
> +    if (CpuMpData->UseSevEsAPMethod) {
> +      AmdSevUpdateCpuMpData (CpuMpData);
> +    }
> +
>      CpuMpData->CpuCount  = MpHandOff->CpuCount;
>      CpuMpData->BspNumber = GetBspNumber (MpHandOff);
>      CpuInfoInHob         = (CPU_INFO_IN_HOB *)(UINTN)CpuMpData-
> >CpuInfoInHob;
> --
> 2.36.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#107265): https://edk2.groups.io/g/devel/message/107265
Mute This Topic: https://groups.io/mt/100366586/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/3901457/1787277/102458076/xyzzy [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-