From: Eric Dong <eric.dong@intel.com>
To: edk2-devel@lists.01.org
Cc: Ruiyu Ni <ruiyu.ni@intel.com>, Laszlo Ersek <lersek@redhat.com>,
Jian J Wang <jian.j.wang@intel.com>
Subject: [Patch] UefiCpuPkg/S3Resume2Pei: disable paging before creating new page table.
Date: Wed, 10 Oct 2018 15:43:39 +0800 [thread overview]
Message-ID: <20181010074339.7804-1-eric.dong@intel.com> (raw)
V4:
Only disable paging when it is enabled.
V3 changes:
No need to change inf file.
V2 changes:
Only disable paging in 32 bit mode, no matter it is enable or not.
V1 changes:
PEI Stack Guard needs to enable paging. This might cause #GP if code
trying to write CR3 register with PML4 page table while the processor
is enabled with PAE paging.
Simply disabling paging before updating CR3 can solve this conflict.
It's an regression caused by change: 0a0d5296e448fc350de1594c49b9c0deff7fad60
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1232
Change-Id: I99bfdba5daa48a95a4c4ef97eeca1af086558957
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by:Eric Dong <eric.dong@intel.com>
Signed-off-by: Eric Dong <eric.dong@intel.com>
---
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
index f164c1713b..c059c42db5 100644
--- a/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
+++ b/UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume.c
@@ -964,6 +964,7 @@ S3RestoreConfig2 (
VOID *GuidHob;
BOOLEAN Build4GPageTableOnly;
BOOLEAN InterruptStatus;
+ IA32_CR0 CR0Reg;
TempAcpiS3Context = 0;
TempEfiBootScriptExecutorVariable = 0;
@@ -1105,6 +1106,17 @@ S3RestoreConfig2 (
//
SetInterruptState (InterruptStatus);
+ if (sizeof (UINTN) == sizeof (UINT32)) {
+ CR0Reg.UintN = AsmReadCr0 ();
+ if (CR0Reg.Bits.PG != 0) {
+ //
+ // We're in 32-bit mode, with paging enabled. We can't set CR3 to
+ // the 64-bit page tables without first disabling paging.
+ //
+ CR0Reg.Bits.PG = 0;
+ AsmWriteCr0 (CR0Reg.UintN);
+ }
+ }
AsmWriteCr3 ((UINTN)SmmS3ResumeState->SmmS3Cr3);
//
--
2.15.0.windows.1
next reply other threads:[~2018-10-10 7:44 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-10 7:43 Eric Dong [this message]
2018-10-10 7:58 ` [Patch] UefiCpuPkg/S3Resume2Pei: disable paging before creating new page table Yao, Jiewen
2018-10-10 13:03 ` Laszlo Ersek
2018-10-10 13:14 ` Yao, Jiewen
2018-10-10 13:19 ` Laszlo Ersek
2018-10-10 13:30 ` Yao, Jiewen
2018-10-10 14:00 ` Laszlo Ersek
-- strict thread matches above, loose matches on Subject: below --
2018-10-09 1:51 Eric Dong
2018-10-09 1:59 ` Wang, Jian J
2018-10-09 2:03 ` Wang, Jian J
2018-10-09 2:27 ` Dong, Eric
2018-10-09 2:05 ` Dong, Eric
2018-10-09 2:15 ` Ni, Ruiyu
2018-10-09 8:09 ` Laszlo Ersek
2018-10-09 8:26 ` Ni, Ruiyu
2018-10-09 8:54 ` Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181010074339.7804-1-eric.dong@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox