Re: [PATCH 1/1] UefiCpuPkg/MpInitLib: Reduce reset vector memory pressure


Ni, Ray
 

It's a good optimization.

Can you eliminate the GetApResetStackSize() and embed the check and calculation in GetApResetVectorSize()?
Reason: GetApResetStackSize() is only called in one place. Removing the additional layer of function call makes
the code easier to read.

Thanks,
Ray

-----Original Message-----
From: Tom Lendacky <thomas.lendacky@amd.com>
Sent: Wednesday, September 23, 2020 3:59 AM
To: devel@edk2.groups.io
Cc: Dong, Eric <eric.dong@intel.com>; Ni, Ray <ray.ni@intel.com>; Laszlo Ersek
<lersek@redhat.com>; Kumar, Rahul1 <rahul1.kumar@intel.com>; Brijesh
Singh <brijesh.singh@amd.com>; Garrett Kirkendall
<garrett.kirkendall@amd.com>
Subject: [PATCH 1/1] UefiCpuPkg/MpInitLib: Reduce reset vector memory
pressure

From: Tom Lendacky <thomas.lendacky@amd.com>

The AP reset vector stack allocation is only required if running as an
SEV-ES guest. Since the reset vector allocation is below 1MB in memory,
eliminate the requirement for bare-metal systems and non SEV-ES guests
to allocate the extra stack area, which can be large if the
PcdCpuMaxLogicalProcessorNumber value is large.

Cc: Garrett Kirkendall <garrett.kirkendall@amd.com>
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
---
UefiCpuPkg/Library/MpInitLib/MpLib.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c
b/UefiCpuPkg/Library/MpInitLib/MpLib.c
index 07426274f639..39af2f9fba7d 100644
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.c
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c
@@ -1152,7 +1152,15 @@ GetApResetStackSize (
VOID
)
{
- return AP_RESET_STACK_SIZE *
PcdGet32(PcdCpuMaxLogicalProcessorNumber);
+ //
+ // The AP reset stack is only used by SEV-ES guests. Don't add to the
+ // allocation if not necessary.
+ //
+ if (PcdGetBool (PcdSevEsIsEnabled) == TRUE) {
+ return AP_RESET_STACK_SIZE *
PcdGet32(PcdCpuMaxLogicalProcessorNumber);
+ } else {
+ return 0;
+ }
}

/**
--
2.28.0

Join devel@edk2.groups.io to automatically receive all group messages.