public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "duntan" <dun.tan@intel.com>
To: "Ni, Ray" <ray.ni@intel.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Dong, Eric" <eric.dong@intel.com>,
	"Kumar, Rahul R" <rahul.r.kumar@intel.com>,
	Gerd Hoffmann <kraxel@redhat.com>,
	"Liu, Zhiguang" <zhiguang.liu@intel.com>
Subject: Re: [Patch V2 07/14] UefiCpuPkg/CpuPageTableLib:Modify RandomTest to check Mask/Attr
Date: Wed, 15 Mar 2023 09:49:26 +0000	[thread overview]
Message-ID: <BN9PR11MB548304C2081B6D95CF77B550E5BF9@BN9PR11MB5483.namprd11.prod.outlook.com> (raw)
In-Reply-To: <MN6PR11MB82444DD755C0130D4D56A46D8CBF9@MN6PR11MB8244.namprd11.prod.outlook.com>

Thanks Ray for the comments. Will create a new patch to split the RandomBoolean() and simplify the code loop in random test

Thanks,
Dun
-----Original Message-----
From: Ni, Ray <ray.ni@intel.com> 
Sent: Wednesday, March 15, 2023 1:49 PM
To: Tan, Dun <dun.tan@intel.com>; devel@edk2.groups.io
Cc: Dong, Eric <eric.dong@intel.com>; Kumar, Rahul R <rahul.r.kumar@intel.com>; Gerd Hoffmann <kraxel@redhat.com>; Liu, Zhiguang <zhiguang.liu@intel.com>
Subject: RE: [Patch V2 07/14] UefiCpuPkg/CpuPageTableLib:Modify RandomTest to check Mask/Attr

> 
> -/**
> -  Return a random boolean.
> -
> -  @return boolean
> -**/
> -BOOLEAN
> -RandomBoolean (
> -  VOID
> -  )
> -{
> -  BOOLEAN  Value;
> -
> -  LocalRandomBytes ((UINT8 *)&Value, sizeof (BOOLEAN));
> -  return Value%2;
> -}
> -
>  /**
>    Return a 32bit random number.
> 
> @@ -139,6 +123,21 @@ Random64 (
>    return (UINT64)(Value % (Limit - Start  + 1)) + Start;  }
> 
> +/**
> +  Returns true with the percentage of input Probability.
> +
> +  @param[in]   Probability    The percentage to return true.
> +
> +  @return boolean
> +**/
> +BOOLEAN
> +RandomBoolean (
> +  UINT8  Probability
> +  )
> +{
> +  return ((Probability > ((UINT8)Random64 (0, 100))) ? TRUE : FALSE); 
> +}
1. can you split the RandomBoolean() change in standalone patch?


2. can you simplify below code to only use for-loop?
> +  //
> +  if (MapEntrys->Maps[MapsIndex].Length > 0) {
> +    if (MapCount != 0) {
> +      UT_ASSERT_EQUAL (Status, RETURN_BUFFER_TOO_SMALL);
> +      Map = AllocatePages (EFI_SIZE_TO_PAGES (MapCount * sizeof
> (IA32_MAP_ENTRY)));
> +      ASSERT (Map != NULL);
> +      Status = PageTableParse (*PageTable, PagingMode, Map, 
> + &MapCount);
> +
> +      if (Map[MapCount - 1].LinearAddress + Map[MapCount - 1].Length 
> + <
> MapEntrys->Maps[MapsIndex].LinearAddress + MapEntrys-
> >Maps[MapsIndex].Length) {
> +        IsNotPresent = TRUE;
> +      } else {
> +        for (Index = 0; Index < MapCount; Index++) {
> +          if ((PreviousAddress < Map[Index].LinearAddress) &&
> +              (MapEntrys->Maps[MapsIndex].LinearAddress <
> Map[Index].LinearAddress) &&
> +              ((MapEntrys->Maps[MapsIndex].LinearAddress + MapEntrys-
> >Maps[MapsIndex].Length) > PreviousAddress))
> +          {
> +            //
> +            // MapEntrys->Maps[MapsIndex] contains not-present range 
> + in
> exsiting page table.
> +            //
> +            IsNotPresent = TRUE;
> +            break;
> +          }
> +
> +          PreviousAddress = Map[Index].LinearAddress + Map[Index].Length;
> +        }
> +      }
> +    } else {
> +      IsNotPresent = TRUE;
> +    }
> +  }
> 
>    PageTableBufferSize = 0;
>    Status              = PageTableMap (
> @@ -638,6 +700,25 @@ SingleMapEntryTest (
>                            &MapEntrys->Maps[MapsIndex].Attribute,
>                            &MapEntrys->Maps[MapsIndex].Mask
>                            );
> +
> +  //
> +  // Return Status should be InvalidParameter when:
> +  // 1. MapEntrys->Maps[MapsIndex] contains not-present range.
> +  // 2. MapEntrys->Maps[MapsIndex].Mask contains zero value field or
> Attribute->Bits.Present is 0.
> +  //
> +  Attribute = &MapEntrys->Maps[MapsIndex].Attribute;
> +  Mask      = &MapEntrys->Maps[MapsIndex].Mask;
> +  if (((Attribute->Bits.Present == 0) || (Mask->Bits.Present == 0) || 
> + (Mask-
> >Bits.ReadWrite == 0) ||
> +       (Mask->Bits.UserSupervisor == 0) || (Mask->Bits.WriteThrough 
> + == 0) ||
> (Mask->Bits.CacheDisabled == 0) ||
> +       (Mask->Bits.Accessed == 0) || (Mask->Bits.Dirty == 0) || 
> + (Mask-
> >Bits.Pat == 0) || (Mask->Bits.Global == 0) ||
> +       (Mask->Bits.PageTableBaseAddress == 0) || 
> + (Mask->Bits.ProtectionKey
> == 0) || (Mask->Bits.Nx == 0)) &&
> +      IsNotPresent)
> +  {
> +    RemoveLastMapEntry (MapEntrys);
> +    UT_ASSERT_EQUAL (Status, RETURN_INVALID_PARAMETER);
> +    return UNIT_TEST_PASSED;
> +  }
> +
>    if (PageTableBufferSize != 0) {
>      UT_ASSERT_EQUAL (Status, RETURN_BUFFER_TOO_SMALL);
> 
> diff --git a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c
> b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c
> index 5bd70c0f65..11f7e607ca 100644
> --- a/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c
> +++ b/UefiCpuPkg/Library/CpuPageTableLib/UnitTest/TestHelper.c
> @@ -171,6 +171,10 @@ IsPageTableValid (
>    UNIT_TEST_STATUS   Status;
>    IA32_PAGING_ENTRY  *PagingEntry;
> 
> +  if (PageTable == 0) {
> +    return UNIT_TEST_PASSED;
> +  }
> +
>    if ((PagingMode == Paging32bit) || (PagingMode == PagingPae) || 
> (PagingMode >= PagingModeMax)) {
>      //
>      // 32bit paging is never supported.
> --
> 2.31.1.windows.1


  reply	other threads:[~2023-03-15  9:50 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-08 10:07 [Patch V2 00/14] Fix issues in CpuPageTableLib duntan
2023-03-08 10:07 ` [Patch V2 01/14] UefiCpuPkg/CpuPageTableLib: Remove unneeded 'if' condition duntan
2023-03-15  1:23   ` Ni, Ray
2023-03-15  1:23   ` Ni, Ray
2023-03-15  1:45     ` duntan
2023-03-08 10:07 ` [Patch V2 02/14] UefiCpuPkg/CpuPageTableLib: Add check for input Length duntan
2023-03-15  1:25   ` Ni, Ray
2023-03-15  1:46     ` duntan
2023-03-08 10:07 ` [Patch V2 03/14] UefiCpuPkg/CpuPageTableLib: Fix the non-1:1 mapping issue duntan
2023-03-15  1:28   ` Ni, Ray
2023-03-15  1:44     ` duntan
2023-03-08 10:07 ` [Patch V2 04/14] UefiCpuPkg/CpuPageTableLib: Fix issue when splitting leaf entry duntan
2023-03-15  1:51   ` Ni, Ray
2023-03-08 10:07 ` [Patch V2 05/14] UefiCpuPkg/CpuPageTebleLib: Check Mask and Attr in PageTableMap duntan
2023-03-15  5:33   ` Ni, Ray
2023-03-15  9:49     ` duntan
2023-03-08 10:07 ` [Patch V2 06/14] UefiCpuPkg/CpuPageTableLib: Add manual test to check Mask and Attr duntan
2023-03-15  5:36   ` Ni, Ray
2023-03-08 10:07 ` [Patch V2 07/14] UefiCpuPkg/CpuPageTableLib:Modify RandomTest to check Mask/Attr duntan
2023-03-15  5:48   ` Ni, Ray
2023-03-15  9:49     ` duntan [this message]
2023-03-08 10:07 ` [Patch V2 08/14] UefiCpuPkg/CpuPageTableLib: Enable non-1:1 mapping in random test duntan
2023-03-15  5:49   ` Ni, Ray
2023-03-08 10:07 ` [Patch V2 09/14] UefiCpuPkg/CpuPageTableLib: Add OUTPUT IsModified parameter duntan
2023-03-15  6:01   ` Ni, Ray
2023-03-15  9:49     ` duntan
2023-03-08 10:07 ` [Patch V2 10/14] UefiCpuPkg/CpuPageTableLib: Modify RandomTest to check IsModified duntan
2023-03-15  6:09   ` Ni, Ray
2023-03-15  9:49     ` duntan
2023-03-08 10:07 ` [Patch V2 11/14] UefiCpuPkg/CpuPageTableLib: Enable PAE paging duntan
2023-03-15  6:24   ` Ni, Ray
2023-03-15  9:49     ` duntan
2023-03-08 10:07 ` [Patch V2 12/14] UefiCpuPkg/CpuPageTableLib: Add RandomTest for " duntan
2023-03-15  6:27   ` Ni, Ray
2023-03-08 10:07 ` [Patch V2 13/14] UefiCpuPkg: Fix IA32 build failure in CpuPageTableLib.inf duntan
2023-03-15  6:35   ` Ni, Ray
2023-03-15  9:49     ` duntan
2023-03-08 10:07 ` [Patch V2 14/14] UefiCpuPkg: Modify UnitTest code since tested API is changed duntan
2023-03-15  6:42   ` Ni, Ray
2023-03-15  9:26     ` Zhiguang Liu
2023-03-15  9:27       ` Ni, Ray

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BN9PR11MB548304C2081B6D95CF77B550E5BF9@BN9PR11MB5483.namprd11.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox