]> xenbits.xensource.com Git - ovmf.git/commitdiff
UefiCpuPkg/CpuPageTableLib: Add RandomTest for PAE paging
authorDun Tan <dun.tan@intel.com>
Wed, 22 Mar 2023 04:14:30 +0000 (12:14 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 27 Mar 2023 08:21:58 +0000 (08:21 +0000)
Add RandomTest for PAE paging.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Tested-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTestHost.c
UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c
UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c

index 430309557950bfa92f7df209fd603375d7fdbc16..b0be2c5a73ff7e76057e3ee1ebe9ca3a7626e2c1 100644 (file)
@@ -13,6 +13,7 @@ static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT  mTestContextPaging4Level    = { P
 static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT  mTestContextPaging4Level1GB = { Paging4Level1GB, 100, 20, USE_RANDOM_ARRAY };\r
 static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT  mTestContextPaging5Level    = { Paging5Level, 100, 20, USE_RANDOM_ARRAY };\r
 static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT  mTestContextPaging5Level1GB = { Paging5Level1GB, 100, 20, USE_RANDOM_ARRAY };\r
+static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT  mTestContextPagingPae       = { PagingPae, 100, 20, USE_RANDOM_ARRAY };\r
 \r
 /**\r
   Check if the input parameters are not supported.\r
@@ -884,6 +885,7 @@ UefiTestMain (
   AddTestCase (RandomTestCase, "Random Test for Paging4Level1G", "Random Test Case2", TestCaseforRandomTest, NULL, NULL, &mTestContextPaging4Level1GB);\r
   AddTestCase (RandomTestCase, "Random Test for Paging5Level", "Random Test Case3", TestCaseforRandomTest, NULL, NULL, &mTestContextPaging5Level);\r
   AddTestCase (RandomTestCase, "Random Test for Paging5Level1G", "Random Test Case4", TestCaseforRandomTest, NULL, NULL, &mTestContextPaging5Level1GB);\r
+  AddTestCase (RandomTestCase, "Random Test for PagingPae", "Random Test Case5", TestCaseforRandomTest, NULL, NULL, &mTestContextPagingPae);\r
 \r
   //\r
   // Execute the tests.\r
index 2db49f7de79dcee80c079f854a592175c711585b..f7a77d00e7dd73b720559ca391e43871fb08368a 100644 (file)
@@ -258,10 +258,9 @@ ValidateAndRandomeModifyPageTable (
   UNIT_TEST_STATUS   Status;\r
   IA32_PAGING_ENTRY  *PagingEntry;\r
 \r
-  if ((PagingMode == Paging32bit) || (PagingMode == PagingPae) || (PagingMode >= PagingModeMax)) {\r
+  if ((PagingMode == Paging32bit) || (PagingMode >= PagingModeMax)) {\r
     //\r
     // 32bit paging is never supported.\r
-    // PAE paging will be supported later.\r
     //\r
     return UNIT_TEST_ERROR_TEST_FAILED;\r
   }\r
index 22f179c21f0155f77b4d3914778d2aab0c17421e..67776255c2ff6a4945d3aa5ce2a4fe407a0a549d 100644 (file)
@@ -175,10 +175,9 @@ IsPageTableValid (
     return UNIT_TEST_PASSED;\r
   }\r
 \r
-  if ((PagingMode == Paging32bit) || (PagingMode == PagingPae) || (PagingMode >= PagingModeMax)) {\r
+  if ((PagingMode == Paging32bit) || (PagingMode >= PagingModeMax)) {\r
     //\r
     // 32bit paging is never supported.\r
-    // PAE paging will be supported later.\r
     //\r
     return UNIT_TEST_ERROR_TEST_FAILED;\r
   }\r
@@ -187,7 +186,12 @@ IsPageTableValid (
   MaxLevel     = (UINT8)(PagingMode >> 8);\r
 \r
   PagingEntry = (IA32_PAGING_ENTRY *)(UINTN)PageTable;\r
-  for (Index = 0; Index < 512; Index++) {\r
+  for (Index = 0; Index < ((PagingMode == PagingPae) ? 4 : 512); Index++) {\r
+    if (PagingMode == PagingPae) {\r
+      UT_ASSERT_EQUAL (PagingEntry[Index].PdptePae.Bits.MustBeZero, 0);\r
+      UT_ASSERT_EQUAL (PagingEntry[Index].PdptePae.Bits.MustBeZero2, 0);\r
+    }\r
+\r
     Status = IsPageTableEntryValid (&PagingEntry[Index], MaxLevel, MaxLeafLevel, Index << (9 * MaxLevel + 3));\r
     if (Status != UNIT_TEST_PASSED) {\r
       return Status;\r
@@ -264,7 +268,7 @@ GetEntryFromPageTable (
   UINT64             Index;\r
   IA32_PAGING_ENTRY  *PagingEntry;\r
 \r
-  if ((PagingMode == Paging32bit) || (PagingMode == PagingPae) || (PagingMode >= PagingModeMax)) {\r
+  if ((PagingMode == Paging32bit) || (PagingMode >= PagingModeMax)) {\r
     //\r
     // 32bit paging is never supported.\r
     // PAE paging will be supported later.\r