Re: [edk2-devel] [Patch V4 20/21] UefiCpuPkg/CpuPageTableLib: Add RandomTest for PAE paging
Reviewed-by: Ray Ni > -Original Message- > From: Tan, Dun > Sent: Thursday, March 23, 2023 3:41 PM > To: devel@edk2.groups.io > Cc: Dong, Eric ; Ni, Ray ; Kumar, > Rahul R ; Gerd Hoffmann > Subject: [Patch V4 20/21] UefiCpuPkg/CpuPageTableLib: Add RandomTest > for PAE paging > > Add RandomTest for PAE paging. > > Signed-off-by: Dun Tan > Cc: Eric Dong > Cc: Ray Ni > Cc: Rahul Kumar > Cc: Gerd Hoffmann > --- > > UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTestHo > st.c | 2 ++ > UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c | > 3 > +-- > UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c | > 12 > > 3 files changed, 11 insertions(+), 6 deletions(-) > > diff --git > a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTest > Host.c > b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTest > Host.c > index e1efc84c82..8554eefa39 100644 > --- > a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTest > Host.c > +++ > b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTest > Host.c > @@ -9,6 +9,7 @@ > #include "CpuPageTableLibUnitTest.h" > > // --- > PageMode-- > TestCount-TestRangeCount---RandomOptions > +static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT > mTestContextPagingPae = { PagingPae, 100, 20, USE_RANDOM_ARRAY }; > static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT > mTestContextPaging4Level= { Paging4Level, 100, 20, > USE_RANDOM_ARRAY }; > static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT > mTestContextPaging4Level1GB = { Paging4Level1GB, 100, 20, > USE_RANDOM_ARRAY }; > static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT > mTestContextPaging5Level= { Paging5Level, 100, 20, > USE_RANDOM_ARRAY }; > @@ -880,6 +881,7 @@ UefiTestMain ( > goto EXIT; >} > > + AddTestCase (RandomTestCase, "Random Test for PagingPae", "Random > Test Case1", TestCaseforRandomTest, NULL, NULL, > &mTestContextPagingPae); >AddTestCase (RandomTestCase, "Random Test for Paging4Level", "Random > Test Case1", TestCaseforRandomTest, NULL, NULL, > &mTestContextPaging4Level); >AddTestCase (RandomTestCase, "Random Test for Paging4Level1G", > "Random Test Case2", TestCaseforRandomTest, NULL, NULL, > &mTestContextPaging4Level1GB); >AddTestCase (RandomTestCase, "Random Test for Paging5Level", "Random > Test Case3", TestCaseforRandomTest, NULL, NULL, > &mTestContextPaging5Level); > diff --git a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c > b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c > index 18a5010c30..7e79b01823 100644 > --- a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c > +++ b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c > @@ -258,10 +258,9 @@ ValidateAndRandomeModifyPageTable ( >UNIT_TEST_STATUS Status; >IA32_PAGING_ENTRY *PagingEntry; > > - if ((PagingMode == Paging32bit) || (PagingMode == PagingPae) || > (PagingMode >= PagingModeMax)) { > + if ((PagingMode == Paging32bit) || (PagingMode >= PagingModeMax)) { > // > // 32bit paging is never supported. > -// PAE paging will be supported later. > // > return UNIT_TEST_ERROR_TEST_FAILED; >} > diff --git a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c > b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c > index 22f179c21f..67776255c2 100644 > --- a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c > +++ b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c > @@ -175,10 +175,9 @@ IsPageTableValid ( > return UNIT_TEST_PASSED; >} > > - if ((PagingMode == Paging32bit) || (PagingMode == PagingPae) || > (PagingMode >= PagingModeMax)) { > + if ((PagingMode == Paging32bit) || (PagingMode >= PagingModeMax)) { > // > // 32bit paging is never supported. > -// PAE paging will be supported later. > // > return UNIT_TEST_ERROR_TEST_FAILED; >} > @@ -187,7 +186,12 @@ IsPageTableValid ( >MaxLevel = (UINT8)(PagingMode >> 8); > >PagingEntry = (IA32_PAGING_ENTRY *)(UINTN)PageTable; > - for (Index = 0; Index < 512; Index++) { > + for (Index = 0; Index < ((PagingMode == PagingPae) ? 4 : 512); Index++) { > +if (PagingMode == PagingPae) { > + UT_ASSERT_EQUAL (PagingEntry[Index].PdptePae.Bits.MustBeZero, 0); > + UT_ASSERT_EQUAL (PagingEntry[Index].PdptePae.Bits.MustBeZero2, 0); > +} > + > Status = IsPageTableEntryValid (&PagingEntry[Index], MaxLevel, > MaxLeafLevel, Index << (9 * MaxLevel + 3)); > if (Status != UNIT_TEST_PASSED) { >return Status; > @@ -264,7 +268,7 @@ GetEntryFromPageTable ( >UINT64 Index; >IA32_PAGING_ENTRY *PagingEntry; > > - if ((PagingMode == Paging32bit) || (PagingMode == PagingPae) || > (PagingMode >= PagingModeMax)) { > + if ((PagingMode == Paging32bit) || (PagingMode >= PagingModeMax)) { > // > /
[edk2-devel] [Patch V4 20/21] UefiCpuPkg/CpuPageTableLib: Add RandomTest for PAE paging
Add RandomTest for PAE paging. Signed-off-by: Dun Tan Cc: Eric Dong Cc: Ray Ni Cc: Rahul Kumar Cc: Gerd Hoffmann --- UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTestHost.c | 2 ++ UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c | 3 +-- UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c | 12 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTestHost.c b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTestHost.c index e1efc84c82..8554eefa39 100644 --- a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTestHost.c +++ b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/CpuPageTableLibUnitTestHost.c @@ -9,6 +9,7 @@ #include "CpuPageTableLibUnitTest.h" // --- PageMode--TestCount-TestRangeCount---RandomOptions +static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT mTestContextPagingPae = { PagingPae, 100, 20, USE_RANDOM_ARRAY }; static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT mTestContextPaging4Level= { Paging4Level, 100, 20, USE_RANDOM_ARRAY }; static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT mTestContextPaging4Level1GB = { Paging4Level1GB, 100, 20, USE_RANDOM_ARRAY }; static CPU_PAGE_TABLE_LIB_RANDOM_TEST_CONTEXT mTestContextPaging5Level= { Paging5Level, 100, 20, USE_RANDOM_ARRAY }; @@ -880,6 +881,7 @@ UefiTestMain ( goto EXIT; } + AddTestCase (RandomTestCase, "Random Test for PagingPae", "Random Test Case1", TestCaseforRandomTest, NULL, NULL, &mTestContextPagingPae); AddTestCase (RandomTestCase, "Random Test for Paging4Level", "Random Test Case1", TestCaseforRandomTest, NULL, NULL, &mTestContextPaging4Level); AddTestCase (RandomTestCase, "Random Test for Paging4Level1G", "Random Test Case2", TestCaseforRandomTest, NULL, NULL, &mTestContextPaging4Level1GB); AddTestCase (RandomTestCase, "Random Test for Paging5Level", "Random Test Case3", TestCaseforRandomTest, NULL, NULL, &mTestContextPaging5Level); diff --git a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c index 18a5010c30..7e79b01823 100644 --- a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c +++ b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/RandomTest.c @@ -258,10 +258,9 @@ ValidateAndRandomeModifyPageTable ( UNIT_TEST_STATUS Status; IA32_PAGING_ENTRY *PagingEntry; - if ((PagingMode == Paging32bit) || (PagingMode == PagingPae) || (PagingMode >= PagingModeMax)) { + if ((PagingMode == Paging32bit) || (PagingMode >= PagingModeMax)) { // // 32bit paging is never supported. -// PAE paging will be supported later. // return UNIT_TEST_ERROR_TEST_FAILED; } diff --git a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c index 22f179c21f..67776255c2 100644 --- a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c +++ b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c @@ -175,10 +175,9 @@ IsPageTableValid ( return UNIT_TEST_PASSED; } - if ((PagingMode == Paging32bit) || (PagingMode == PagingPae) || (PagingMode >= PagingModeMax)) { + if ((PagingMode == Paging32bit) || (PagingMode >= PagingModeMax)) { // // 32bit paging is never supported. -// PAE paging will be supported later. // return UNIT_TEST_ERROR_TEST_FAILED; } @@ -187,7 +186,12 @@ IsPageTableValid ( MaxLevel = (UINT8)(PagingMode >> 8); PagingEntry = (IA32_PAGING_ENTRY *)(UINTN)PageTable; - for (Index = 0; Index < 512; Index++) { + for (Index = 0; Index < ((PagingMode == PagingPae) ? 4 : 512); Index++) { +if (PagingMode == PagingPae) { + UT_ASSERT_EQUAL (PagingEntry[Index].PdptePae.Bits.MustBeZero, 0); + UT_ASSERT_EQUAL (PagingEntry[Index].PdptePae.Bits.MustBeZero2, 0); +} + Status = IsPageTableEntryValid (&PagingEntry[Index], MaxLevel, MaxLeafLevel, Index << (9 * MaxLevel + 3)); if (Status != UNIT_TEST_PASSED) { return Status; @@ -264,7 +268,7 @@ GetEntryFromPageTable ( UINT64 Index; IA32_PAGING_ENTRY *PagingEntry; - if ((PagingMode == Paging32bit) || (PagingMode == PagingPae) || (PagingMode >= PagingModeMax)) { + if ((PagingMode == Paging32bit) || (PagingMode >= PagingModeMax)) { // // 32bit paging is never supported. // PAE paging will be supported later. -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#101648): https://edk2.groups.io/g/devel/message/101648 Mute This Topic: https://groups.io/mt/97796399/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-