mirror of https://github.com/acidanthera/audk.git
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>
This commit is contained in:
parent
c8c6cf149d
commit
8727cc9a8e
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue