On 08/10/18 06:19, Eric Dong wrote: > Because PrepareApStartupVector() stores StackAddress to > "mExchangeInfo->StackStart" (which has type (VOID*)), and because > "UefiCpuPkg/PiSmmCpuDxeSmm/X64/MpFuncs.nasm" reads the latter with: > > add edi, StackStartAddressLocation > add rax, qword [edi] > mov rsp, rax > mov qword [edi], rax > > in long-mode code. So code can remove below 4G limitation. > > Cc: Laszlo Ersek <ler...@redhat.com> > Cc: Ruiyu Ni <ruiyu...@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Eric Dong <eric.d...@intel.com> > --- > UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c > b/UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c > index 5b99a6e759..d18f33a5b8 100644 > --- a/UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c > +++ b/UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c > @@ -46,9 +46,7 @@ typedef struct { > } ACPI_CPU_DATA_EX; > > /** > - Allocate EfiACPIMemoryNVS below 4G memory address. > - > - This function allocates EfiACPIMemoryNVS below 4G memory address. > + Allocate EfiACPIMemoryNVS memory. > > @param[in] Size Size of memory to allocate. > > @@ -56,7 +54,7 @@ typedef struct { > > **/ > VOID * > -AllocateAcpiNvsMemoryBelow4G ( > +AllocateAcpiNvsMemory ( > IN UINTN Size > ) > { > @@ -64,9 +62,8 @@ AllocateAcpiNvsMemoryBelow4G ( > EFI_STATUS Status; > VOID *Buffer; > > - Address = BASE_4GB - 1; > Status = gBS->AllocatePages ( > - AllocateMaxAddress, > + AllocateAnyPages, > EfiACPIMemoryNVS, > EFI_SIZE_TO_PAGES (Size), > &Address > @@ -239,9 +236,13 @@ CpuS3DataInitialize ( > AcpiCpuData->MtrrTable = > (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->MtrrTable; > > // > - // Allocate stack space for all CPUs > + // Allocate stack space for all CPUs. > + // Use ACPI NVS memory type because this data will be directly used by APs > + // in S3 resume phase in long mode. Also during S3 resume, the stack buffer > + // will only be used as scratch space. i.e. we won't read anything from it > + // before we write to it, in PiSmmCpuDxeSemm.
Please fix the typo: "PiSmmCpuDxeSemm" --> "PiSmmCpuDxeSmm". With that: Reviewed-by: Laszlo Ersek <ler...@redhat.com> Thanks Laszlo > // > - Stack = AllocateAcpiNvsMemoryBelow4G (NumberOfCpus * > AcpiCpuData->StackSize); > + Stack = AllocateAcpiNvsMemory (NumberOfCpus * AcpiCpuData->StackSize); > ASSERT (Stack != NULL); > AcpiCpuData->StackAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)Stack; > > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel