]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c
UefiCpuPkg\CpuSmm: Save & restore CR2 on-demand paging in SMM
[mirror_edk2.git] / UefiCpuPkg / PiSmmCpuDxeSmm / X64 / PageTbl.c
index 2c77cb47a48a435913e13a4689ca03ca587ae24b..95eaf0b01653434867b3e9e676226db9af25569f 100644 (file)
@@ -1053,3 +1053,33 @@ SetPageTableAttributes (
 \r
   return ;\r
 }\r
+\r
+/**\r
+  This function reads CR2 register when on-demand paging is enabled.\r
+\r
+  @param[out]  *Cr2  Pointer to variable to hold CR2 register value.\r
+**/\r
+VOID\r
+SaveCr2 (\r
+  OUT UINTN  *Cr2\r
+  )\r
+{\r
+  if (!mCpuSmmStaticPageTable) {\r
+    *Cr2 = AsmReadCr2 ();\r
+  }\r
+}\r
+\r
+/**\r
+  This function restores CR2 register when on-demand paging is enabled.\r
+\r
+  @param[in]  Cr2  Value to write into CR2 register.\r
+**/\r
+VOID\r
+RestoreCr2 (\r
+  IN UINTN  Cr2\r
+  )\r
+{\r
+  if (!mCpuSmmStaticPageTable) {\r
+    AsmWriteCr2 (Cr2);\r
+  }\r
+}\r