summaryrefslogtreecommitdiffstats
path: root/UefiCpuPkg
diff options
context:
space:
mode:
authorDun Tan <dun.tan@intel.com>2023-03-07 15:25:27 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2023-03-27 08:21:58 +0000
commit8727cc9a8e96608abfc29f5367a1929aae685f95 (patch)
treef70041d6bc4135be5eb6dce19e04a6a7b083c1d7 /UefiCpuPkg
parentc8c6cf149d07e2749ce7a17c084ab658af2e9cdd (diff)
downloadedk2-8727cc9a8e96608abfc29f5367a1929aae685f95.tar.gz
edk2-8727cc9a8e96608abfc29f5367a1929aae685f95.tar.bz2
edk2-8727cc9a8e96608abfc29f5367a1929aae685f95.zip
UefiCpuPkg/CpuPageTableLib: Modify RandomTest to check IsModified
Modify RandomTest to check if parameter IsModified of PageTableMap() correctlly indicates whether input page table is modified or not. 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> Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Diffstat (limited to 'UefiCpuPkg')
-rw-r--r--UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c45
1 files changed, 33 insertions, 12 deletions
diff --git a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c
index e603dba269..bffd95c898 100644
--- a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c
+++ b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c
@@ -636,6 +636,8 @@ SingleMapEntryTest (
VOID *Buffer;
IA32_MAP_ENTRY *Map;
UINTN MapCount;
+ IA32_MAP_ENTRY *Map2;
+ UINTN MapCount2;
UINTN Index;
UINTN KeyPointCount;
UINTN NewKeyPointCount;
@@ -648,11 +650,13 @@ SingleMapEntryTest (
IA32_MAP_ATTRIBUTE *Attribute;
UINT64 LastNotPresentRegionStart;
BOOLEAN IsNotPresent;
+ BOOLEAN IsModified;
MapsIndex = MapEntrys->Count;
MapCount = 0;
LastNotPresentRegionStart = 0;
IsNotPresent = FALSE;
+ IsModified = FALSE;
GenerateSingleRandomMapEntry (MaxAddress, MapEntrys);
LastMapEntry = &MapEntrys->Maps[MapsIndex];
@@ -700,7 +704,7 @@ SingleMapEntryTest (
LastMapEntry->Length,
&LastMapEntry->Attribute,
&LastMapEntry->Mask,
- NULL
+ &IsModified
);
Attribute = &LastMapEntry->Attribute;
@@ -761,7 +765,7 @@ SingleMapEntryTest (
LastMapEntry->Length,
&LastMapEntry->Attribute,
&LastMapEntry->Mask,
- NULL
+ &IsModified
);
}
@@ -775,18 +779,31 @@ SingleMapEntryTest (
return TestStatus;
}
- MapCount = 0;
- Status = PageTableParse (*PageTable, PagingMode, NULL, &MapCount);
- if (MapCount != 0) {
+ MapCount2 = 0;
+ Status = PageTableParse (*PageTable, PagingMode, NULL, &MapCount2);
+ if (MapCount2 != 0) {
UT_ASSERT_EQUAL (Status, RETURN_BUFFER_TOO_SMALL);
//
- // Allocate memory for Maps
+ // Allocate memory for Map2
// Note the memory is only used in this one Single MapEntry Test
//
- Map = AllocatePages (EFI_SIZE_TO_PAGES (MapCount * sizeof (IA32_MAP_ENTRY)));
- ASSERT (Map != NULL);
- Status = PageTableParse (*PageTable, PagingMode, Map, &MapCount);
+ Map2 = AllocatePages (EFI_SIZE_TO_PAGES (MapCount2 * sizeof (IA32_MAP_ENTRY)));
+ ASSERT (Map2 != NULL);
+ Status = PageTableParse (*PageTable, PagingMode, Map2, &MapCount2);
+ }
+
+ //
+ // Check if PageTable has been modified.
+ //
+ if (MapCount2 != MapCount) {
+ UT_ASSERT_EQUAL (IsModified, TRUE);
+ } else {
+ if (CompareMem (Map, Map2, MapCount2 * sizeof (IA32_MAP_ENTRY)) != 0) {
+ UT_ASSERT_EQUAL (IsModified, TRUE);
+ } else {
+ UT_ASSERT_EQUAL (IsModified, FALSE);
+ }
}
UT_ASSERT_EQUAL (Status, RETURN_SUCCESS);
@@ -796,17 +813,17 @@ SingleMapEntryTest (
// Note the memory is only used in this one Single MapEntry Test
//
KeyPointCount = 0;
- GetKeyPointList (MapEntrys, Map, MapCount, NULL, &KeyPointCount);
+ GetKeyPointList (MapEntrys, Map2, MapCount2, NULL, &KeyPointCount);
KeyPointBuffer = AllocatePages (EFI_SIZE_TO_PAGES (KeyPointCount * sizeof (UINT64)));
ASSERT (KeyPointBuffer != NULL);
NewKeyPointCount = 0;
- GetKeyPointList (MapEntrys, Map, MapCount, KeyPointBuffer, &NewKeyPointCount);
+ GetKeyPointList (MapEntrys, Map2, MapCount2, KeyPointBuffer, &NewKeyPointCount);
//
// Compare all key point's attribute
//
for (Index = 0; Index < NewKeyPointCount; Index++) {
- if (!CompareEntrysforOnePoint (KeyPointBuffer[Index], MapEntrys, Map, MapCount, InitMap, InitMapCount)) {
+ if (!CompareEntrysforOnePoint (KeyPointBuffer[Index], MapEntrys, Map2, MapCount2, InitMap, InitMapCount)) {
DEBUG ((DEBUG_INFO, "Error happens at below key point\n"));
DEBUG ((DEBUG_INFO, "Index = %d KeyPointBuffer[Index] = 0x%lx\n", Index, KeyPointBuffer[Index]));
Value = GetEntryFromPageTable (*PageTable, PagingMode, KeyPointBuffer[Index], &Level);
@@ -820,6 +837,10 @@ SingleMapEntryTest (
FreePages (Map, EFI_SIZE_TO_PAGES (MapCount * sizeof (IA32_MAP_ENTRY)));
}
+ if (MapCount2 != 0) {
+ FreePages (Map2, EFI_SIZE_TO_PAGES (MapCount2 * sizeof (IA32_MAP_ENTRY)));
+ }
+
return UNIT_TEST_PASSED;
}