From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:4001:c06::244; helo=mail-io0-x244.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-io0-x244.google.com (mail-io0-x244.google.com [IPv6:2607:f8b0:4001:c06::244]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 1D07B20355222 for ; Fri, 10 Nov 2017 07:52:30 -0800 (PST) Received: by mail-io0-x244.google.com with SMTP id d66so14043675ioe.5 for ; Fri, 10 Nov 2017 07:56:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=YKjqrs/lzX0Y9sicMYcGDa7tBip+RpjLheqgOYzmO3k=; b=YgJhsobG7LjhFaOkXo17PBD9tRr8oDPStB8MqCZvn3COsT1NtCH0BOdwijaJr6NoiM trBXmvhAA0Xtu5imApK80P3TO9BhgYZ29FyHa/IHnxvstl4JWSG9KpAkRgTsXkxUSZJB 8OLbt4/vdvZatgwaOxBB7tASAGQd2jlsP8Xgk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=YKjqrs/lzX0Y9sicMYcGDa7tBip+RpjLheqgOYzmO3k=; b=Ud3nyMVJPDgezfcKVjmoA3GkjWcd0XpWezOyX2tu7wc2WzTb2ayUbnCL0dFBk7/uHI gThv31zn1H1mbNuvnNp0ww3vKs0sCmzuO56rCP9R6l+NOrN/uneeOQ2p05OSGwsJ1PW+ dvVLSGhcR86f0Y1dVub6xiU3jowmzXwo7MWoU0lOW/pb1GTmxz89HxD2XPig1GiWR1IV SOC/bnMXHJmQZ2mNfOoXiUfwJUC7hvdCBCp2NbCIsq5OriSf6+QewRypDv01pNIgSW+C Xflx/NJcJ4VlArdz3DvZ04wKj5oTvT7NaazkaSPjn9rNECTrEDZ6X9QVoD0pStb9LsQZ ow7A== X-Gm-Message-State: AJaThX79t7j0FwmyX+KSFUZZQjXiVZ4yRorE9L54DH8fYq64nUDfbbfL TXQSuqDkDr+uW454O6vkhMIlLwTVyQPTwvDYu9zibQ== X-Google-Smtp-Source: AGs4zMaLUkxwUjfRvS+g8n5nlP4Y2RVPeJQdXKkWVTgt85gKjRG4SBY8WZxRZlTPbkvccdVR+5uZyEUVPMx/5yd51so= X-Received: by 10.107.82.6 with SMTP id g6mr880299iob.253.1510329393026; Fri, 10 Nov 2017 07:56:33 -0800 (PST) MIME-Version: 1.0 Received: by 10.107.104.20 with HTTP; Fri, 10 Nov 2017 07:56:32 -0800 (PST) In-Reply-To: <20171110154908.306-3-lersek@redhat.com> References: <20171110154908.306-1-lersek@redhat.com> <20171110154908.306-3-lersek@redhat.com> From: Ard Biesheuvel Date: Fri, 10 Nov 2017 15:56:32 +0000 Message-ID: To: Laszlo Ersek Cc: edk2-devel-01 , Jordan Justen , Ruiyu Ni Subject: Re: [PATCH 2/4] OvmfPkg/Sec/Ia32: seed the temporary RAM with PcdInitValueInTempStack X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Nov 2017 15:52:31 -0000 Content-Type: text/plain; charset="UTF-8" On 10 November 2017 at 15:49, Laszlo Ersek 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 > Cc: Jordan Justen > Cc: Ruiyu Ni > Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=747 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Laszlo Ersek > --- > 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 > >