On 10 November 2017 at 15:49, Laszlo Ersek <[email protected]> wrote: > This allows the PEI core to report the maximum temporary SEC/PEI stack > usage on the DEBUG_INFO level, in the PeiCheckAndSwitchStack() function > [MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c]: > > * Normal boot: > >> Temp Stack : BaseAddress=0x814000 Length=0x4000 >> Temp Heap : BaseAddress=0x810000 Length=0x4000 >> Total temporary memory: 32768 bytes. >> temporary memory stack ever used: 3664 bytes. <---- >> temporary memory heap used for HobList: 5904 bytes. >> temporary memory heap occupied by memory pages: 0 bytes. > > * S3 resume (with PEI decompression / SMM): > >> Temp Stack : BaseAddress=0x814000 Length=0x4000 >> Temp Heap : BaseAddress=0x810000 Length=0x4000 >> Total temporary memory: 32768 bytes. >> temporary memory stack ever used: 3428 bytes. <---- >> temporary memory heap used for HobList: 4816 bytes. >> temporary memory heap occupied by memory pages: 0 bytes. > > I unit-tested this change by transitorily adding an infinite loop right > after the "rep stosd", and dumping the guest's temp SEC/PEI RAM (32KB > currently) while the guest was stuck in the loop. The dump includes one > dword from before and after the temp SEC/PEI RAM: > >> $ virsh qemu-monitor-command GUEST_NAME --hmp 'xp /8194wx 0x80FFFC' >> >> 000000000080fffc: 0x00000000 0x5aa55aa5 0x5aa55aa5 0x5aa55aa5 >> 000000000081000c: 0x5aa55aa5 0x5aa55aa5 0x5aa55aa5 0x5aa55aa5 >> ... >> 0000000000817fec: 0x5aa55aa5 0x5aa55aa5 0x5aa55aa5 0x5aa55aa5 >> 0000000000817ffc: 0x5aa55aa5 0x00000000 > > Cc: Ard Biesheuvel <[email protected]> > Cc: Jordan Justen <[email protected]> > Cc: Ruiyu Ni <[email protected]> > Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=747 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Laszlo Ersek <[email protected]> > --- > OvmfPkg/Sec/SecMain.inf | 1 + > OvmfPkg/Sec/Ia32/SecEntry.nasm | 13 +++++++++++++ > 2 files changed, 14 insertions(+) > > diff --git a/OvmfPkg/Sec/SecMain.inf b/OvmfPkg/Sec/SecMain.inf > index 711b59530907..6051cb3c6c4c 100644 > --- a/OvmfPkg/Sec/SecMain.inf > +++ b/OvmfPkg/Sec/SecMain.inf > @@ -71,6 +71,7 @@ [Pcd] > gEfiMdePkgTokenSpaceGuid.PcdGuidedExtractHandlerTableAddress > gUefiOvmfPkgTokenSpaceGuid.PcdGuidedExtractHandlerTableSize > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDecompressionScratchEnd > + gEfiMdeModulePkgTokenSpaceGuid.PcdInitValueInTempStack > > [FeaturePcd] > gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire > diff --git a/OvmfPkg/Sec/Ia32/SecEntry.nasm b/OvmfPkg/Sec/Ia32/SecEntry.nasm > index 54d074e621f6..1d426fafa888 100644 > --- a/OvmfPkg/Sec/Ia32/SecEntry.nasm > +++ b/OvmfPkg/Sec/Ia32/SecEntry.nasm > @@ -29,6 +29,7 @@ extern ASM_PFX(SecCoreStartupWithStack) > ; @param[in] EAX Initial value of the EAX register (BIST: Built-in Self > Test) > ; @param[in] DI 'BP': boot-strap processor, or 'AP': application > processor > ; @param[in] EBP Pointer to the start of the Boot Firmware Volume > +; @param[in] ES Set to LINEAR_SEL in TransitionFromReal16To32BitFlat
What does this mean? Does it belong in this patch? (Knowing you, and noticing that the next patch adds it to the x86 version of this code as well, I am sure it probably does, but I just need you to explain it to me :-)) > ; > ; @return None This routine does not return > ; > @@ -44,6 +45,18 @@ ASM_PFX(_ModuleEntryPoint): > mov esp, ebx > nop > > + ; > + ; Fill the temporary RAM with the initial stack value. > + ; The loop below will seed the heap as well, but that's harmless. > + ; > + mov eax, FixedPcdGet32 (PcdInitValueInTempStack) ; dword to store > + mov edi, FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) ; base address, > + ; relative to ES > + mov ecx, FixedPcdGet32 (PcdOvmfSecPeiTempRamSize) ; byte count > + shr ecx, 2 ; dword count > + cld ; store from base > up > + rep stosd > + > ; > ; Setup parameters and call SecCoreStartupWithStack > ; [esp] return address for call > -- > 2.14.1.3.gb7cf6e02401b > > _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

