mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/MpInitLib: Reduce reset vector memory pressure
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, and also remove the
CPU_STACK_ALIGNMENT alignment.
Fixes: 7b7508ad78
("UefiCpuPkg: Allow AP booting under SEV-ES")
Cc: Garrett Kirkendall <garrett.kirkendall@amd.com>
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Message-Id: <21345cdbc906519558202b3851257ca07b9239ba.1600884239.git.thomas.lendacky@amd.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
[lersek@redhat.com: supply missing space character after "PcdGet32"]
This commit is contained in:
parent
92e9c44f20
commit
93edd1887e
|
@ -1141,20 +1141,6 @@ RestoreWakeupBuffer(
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
Calculate the size of the reset stack.
|
||||
|
||||
@return Total amount of memory required for stacks
|
||||
**/
|
||||
STATIC
|
||||
UINTN
|
||||
GetApResetStackSize (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return AP_RESET_STACK_SIZE * PcdGet32(PcdCpuMaxLogicalProcessorNumber);
|
||||
}
|
||||
|
||||
/**
|
||||
Calculate the size of the reset vector.
|
||||
|
||||
|
@ -1170,11 +1156,23 @@ GetApResetVectorSize (
|
|||
{
|
||||
UINTN Size;
|
||||
|
||||
Size = ALIGN_VALUE (AddressMap->RendezvousFunnelSize +
|
||||
AddressMap->SwitchToRealSize +
|
||||
sizeof (MP_CPU_EXCHANGE_INFO),
|
||||
CPU_STACK_ALIGNMENT);
|
||||
Size += GetApResetStackSize ();
|
||||
Size = AddressMap->RendezvousFunnelSize +
|
||||
AddressMap->SwitchToRealSize +
|
||||
sizeof (MP_CPU_EXCHANGE_INFO);
|
||||
|
||||
//
|
||||
// The AP reset stack is only used by SEV-ES guests. Do not add to the
|
||||
// allocation if SEV-ES is not enabled.
|
||||
//
|
||||
if (PcdGetBool (PcdSevEsIsEnabled)) {
|
||||
//
|
||||
// Stack location is based on APIC ID, so use the total number of
|
||||
// processors for calculating the total stack area.
|
||||
//
|
||||
Size += AP_RESET_STACK_SIZE * PcdGet32 (PcdCpuMaxLogicalProcessorNumber);
|
||||
|
||||
Size = ALIGN_VALUE (Size, CPU_STACK_ALIGNMENT);
|
||||
}
|
||||
|
||||
return Size;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue