diff options
Diffstat (limited to 'UefiCpuPkg')
-rw-r--r-- | UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c index 160e33b4ed..f4aa267984 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c @@ -851,7 +851,15 @@ SaveCr2 ( OUT UINTN *Cr2
)
{
- *Cr2 = AsmReadCr2 ();
+ //
+ // A page fault (#PF) that triggers an update to the page
+ // table only occurs if SmiProfile is enabled. Therefore, it is
+ // necessary to save the CR2 register if SmiProfile is
+ // configured to be enabled.
+ //
+ if (mSmmProfileEnabled) {
+ *Cr2 = AsmReadCr2 ();
+ }
}
/**
@@ -864,5 +872,13 @@ RestoreCr2 ( IN UINTN Cr2
)
{
- AsmWriteCr2 (Cr2);
+ //
+ // A page fault (#PF) that triggers an update to the page
+ // table only occurs if SmiProfile is enabled. Therefore, it is
+ // necessary to restore the CR2 register if SmiProfile is
+ // configured to be enabled.
+ //
+ if (mSmmProfileEnabled) {
+ AsmWriteCr2 (Cr2);
+ }
}
|