[edk2-devel] [PATCH v2 1/3] UefiCpuPkg/PiSmmCpu: Change variable names and comments to follow SDM

Dong, Eric eric.dong at intel.com
Tue Jul 9 01:08:35 UTC 2019


Reviewed-by: Eric Dong <eric.dong at intel.com>

> -----Original Message-----
> From: devel at edk2.groups.io [mailto:devel at edk2.groups.io] On Behalf Of Ni,
> Ray
> Sent: Wednesday, July 3, 2019 2:54 PM
> To: devel at edk2.groups.io
> Cc: Dong, Eric <eric.dong at intel.com>; Laszlo Ersek <lersek at redhat.com>
> Subject: [edk2-devel] [PATCH v2 1/3] UefiCpuPkg/PiSmmCpu: Change
> variable names and comments to follow SDM
> 
> Per SDM, for IA-32e 4-KByte paging, there are four layers in the page table
> structure:
> 1. PML4
> 2. Page-Directory-Pointer Table (PDPT)
> 3. Page-Directory (PD)
> 4. Page Table (PT)
> 
> The patch changes the local variable names and comments to use "PML4",
> "PDPT", "PD", "PT" to better align to terms used in SDM.
> 
> There is no functionality impact for this change.
> 
> Signed-off-by: Ray Ni <ray.ni at intel.com>
> Cc: Eric Dong <eric.dong at intel.com>
> Regression-tested-by: Laszlo Ersek <lersek at redhat.com>
> ---
>  UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c | 114 ++++++++++++---------
> ----
>  1 file changed, 57 insertions(+), 57 deletions(-)
> 
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c
> b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c
> index 3b2f967355..e2b6a2d9b2 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfile.c
> @@ -535,15 +535,15 @@ InitPaging (
>    )
>  {
>    UINT64                            *Pml4;
> -  UINT64                            *Pde;
> -  UINT64                            *Pte;
> +  UINT64                            *Pdpt;
> +  UINT64                            *Pd;
>    UINT64                            *Pt;
>    UINTN                             Address;
> -  UINTN                             Level1;
> -  UINTN                             Level2;
> -  UINTN                             Level3;
> -  UINTN                             Level4;
> -  UINTN                             NumberOfPdpEntries;
> +  UINTN                             Pml4Index;
> +  UINTN                             PdptIndex;
> +  UINTN                             PdIndex;
> +  UINTN                             PtIndex;
> +  UINTN                             NumberOfPdptEntries;
>    UINTN                             NumberOfPml4Entries;
>    UINTN                             SizeOfMemorySpace;
>    BOOLEAN                           Nx;
> @@ -556,143 +556,143 @@ InitPaging (
>      //
>      if (SizeOfMemorySpace <= 39 ) {
>        NumberOfPml4Entries = 1;
> -      NumberOfPdpEntries = (UINT32)LShiftU64 (1, (SizeOfMemorySpace -
> 30));
> +      NumberOfPdptEntries = (UINT32)LShiftU64 (1, (SizeOfMemorySpace -
> + 30));
>      } else {
>        NumberOfPml4Entries = (UINT32)LShiftU64 (1, (SizeOfMemorySpace -
> 39));
> -      NumberOfPdpEntries = 512;
> +      NumberOfPdptEntries = 512;
>      }
>    } else {
>      NumberOfPml4Entries = 1;
> -    NumberOfPdpEntries  = 4;
> +    NumberOfPdptEntries  = 4;
>    }
> 
>    //
>    // Go through page table and change 2MB-page into 4KB-page.
>    //
> -  for (Level1 = 0; Level1 < NumberOfPml4Entries; Level1++) {
> +  for (Pml4Index = 0; Pml4Index < NumberOfPml4Entries; Pml4Index++) {
>      if (sizeof (UINTN) == sizeof (UINT64)) {
> -      if ((Pml4[Level1] & IA32_PG_P) == 0) {
> +      if ((Pml4[Pml4Index] & IA32_PG_P) == 0) {
>          //
> -        // If Pml4 entry does not exist, skip it
> +        // If PML4 entry does not exist, skip it
>          //
>          continue;
>        }
> -      Pde = (UINT64 *)(UINTN)(Pml4[Level1] & ~mAddressEncMask &
> PHYSICAL_ADDRESS_MASK);
> +      Pdpt = (UINT64 *)(UINTN)(Pml4[Pml4Index] & ~mAddressEncMask &
> + PHYSICAL_ADDRESS_MASK);
>      } else {
> -      Pde = (UINT64*)(UINTN)mSmmProfileCr3;
> +      Pdpt = (UINT64*)(UINTN)mSmmProfileCr3;
>      }
> -    for (Level2 = 0; Level2 < NumberOfPdpEntries; Level2++, Pde++) {
> -      if ((*Pde & IA32_PG_P) == 0) {
> +    for (PdptIndex = 0; PdptIndex < NumberOfPdptEntries; PdptIndex++,
> Pdpt++) {
> +      if ((*Pdpt & IA32_PG_P) == 0) {
>          //
> -        // If PDE entry does not exist, skip it
> +        // If PDPT entry does not exist, skip it
>          //
>          continue;
>        }
> -      if ((*Pde & IA32_PG_PS) != 0) {
> +      if ((*Pdpt & IA32_PG_PS) != 0) {
>          //
>          // This is 1G entry, skip it
>          //
>          continue;
>        }
> -      Pte = (UINT64 *)(UINTN)(*Pde & ~mAddressEncMask &
> PHYSICAL_ADDRESS_MASK);
> -      if (Pte == 0) {
> +      Pd = (UINT64 *)(UINTN)(*Pdpt & ~mAddressEncMask &
> PHYSICAL_ADDRESS_MASK);
> +      if (Pd == 0) {
>          continue;
>        }
> -      for (Level3 = 0; Level3 < SIZE_4KB / sizeof (*Pte); Level3++, Pte++) {
> -        if ((*Pte & IA32_PG_P) == 0) {
> +      for (PdIndex = 0; PdIndex < SIZE_4KB / sizeof (*Pd); PdIndex++, Pd++) {
> +        if ((*Pd & IA32_PG_P) == 0) {
>            //
> -          // If PTE entry does not exist, skip it
> +          // If PD entry does not exist, skip it
>            //
>            continue;
>          }
> -        Address = (((Level2 << 9) + Level3) << 21);
> +        Address = (((PdptIndex << 9) + PdIndex) << 21);
> 
>          //
>          // If it is 2M page, check IsAddressSplit()
>          //
> -        if (((*Pte & IA32_PG_PS) != 0) && IsAddressSplit (Address)) {
> +        if (((*Pd & IA32_PG_PS) != 0) && IsAddressSplit (Address)) {
>            //
>            // Based on current page table, create 4KB page table for split area.
>            //
> -          ASSERT (Address == (*Pte & PHYSICAL_ADDRESS_MASK));
> +          ASSERT (Address == (*Pd & PHYSICAL_ADDRESS_MASK));
> 
>            Pt = AllocatePageTableMemory (1);
>            ASSERT (Pt != NULL);
> 
>            // Split it
> -          for (Level4 = 0; Level4 < SIZE_4KB / sizeof(*Pt); Level4++) {
> -            Pt[Level4] = Address + ((Level4 << 12) | mAddressEncMask |
> PAGE_ATTRIBUTE_BITS);
> +          for (PtIndex = 0; PtIndex < SIZE_4KB / sizeof(*Pt); PtIndex++) {
> +            Pt[PtIndex] = Address + ((PtIndex << 12) | mAddressEncMask
> + | PAGE_ATTRIBUTE_BITS);
>            } // end for PT
> -          *Pte = (UINT64)(UINTN)Pt | mAddressEncMask |
> PAGE_ATTRIBUTE_BITS;
> +          *Pd = (UINT64)(UINTN)Pt | mAddressEncMask |
> + PAGE_ATTRIBUTE_BITS;
>          } // end if IsAddressSplit
> -      } // end for PTE
> -    } // end for PDE
> -  }
> +      } // end for PD
> +    } // end for PDPT
> +  } // end for PML4
> 
>    //
>    // Go through page table and set several page table entries to absent or
> execute-disable.
>    //
>    DEBUG ((EFI_D_INFO, "Patch page table start ...\n"));
> -  for (Level1 = 0; Level1 < NumberOfPml4Entries; Level1++) {
> +  for (Pml4Index = 0; Pml4Index < NumberOfPml4Entries; Pml4Index++) {
>      if (sizeof (UINTN) == sizeof (UINT64)) {
> -      if ((Pml4[Level1] & IA32_PG_P) == 0) {
> +      if ((Pml4[Pml4Index] & IA32_PG_P) == 0) {
>          //
> -        // If Pml4 entry does not exist, skip it
> +        // If PML4 entry does not exist, skip it
>          //
>          continue;
>        }
> -      Pde = (UINT64 *)(UINTN)(Pml4[Level1] & ~mAddressEncMask &
> PHYSICAL_ADDRESS_MASK);
> +      Pdpt = (UINT64 *)(UINTN)(Pml4[Pml4Index] & ~mAddressEncMask &
> + PHYSICAL_ADDRESS_MASK);
>      } else {
> -      Pde = (UINT64*)(UINTN)mSmmProfileCr3;
> +      Pdpt = (UINT64*)(UINTN)mSmmProfileCr3;
>      }
> -    for (Level2 = 0; Level2 < NumberOfPdpEntries; Level2++, Pde++) {
> -      if ((*Pde & IA32_PG_P) == 0) {
> +    for (PdptIndex = 0; PdptIndex < NumberOfPdptEntries; PdptIndex++,
> Pdpt++) {
> +      if ((*Pdpt & IA32_PG_P) == 0) {
>          //
> -        // If PDE entry does not exist, skip it
> +        // If PDPT entry does not exist, skip it
>          //
>          continue;
>        }
> -      if ((*Pde & IA32_PG_PS) != 0) {
> +      if ((*Pdpt & IA32_PG_PS) != 0) {
>          //
>          // This is 1G entry, set NX bit and skip it
>          //
>          if (mXdSupported) {
> -          *Pde = *Pde | IA32_PG_NX;
> +          *Pdpt = *Pdpt | IA32_PG_NX;
>          }
>          continue;
>        }
> -      Pte = (UINT64 *)(UINTN)(*Pde & ~mAddressEncMask &
> PHYSICAL_ADDRESS_MASK);
> -      if (Pte == 0) {
> +      Pd = (UINT64 *)(UINTN)(*Pdpt & ~mAddressEncMask &
> PHYSICAL_ADDRESS_MASK);
> +      if (Pd == 0) {
>          continue;
>        }
> -      for (Level3 = 0; Level3 < SIZE_4KB / sizeof (*Pte); Level3++, Pte++) {
> -        if ((*Pte & IA32_PG_P) == 0) {
> +      for (PdIndex = 0; PdIndex < SIZE_4KB / sizeof (*Pd); PdIndex++, Pd++) {
> +        if ((*Pd & IA32_PG_P) == 0) {
>            //
> -          // If PTE entry does not exist, skip it
> +          // If PD entry does not exist, skip it
>            //
>            continue;
>          }
> -        Address = (((Level2 << 9) + Level3) << 21);
> +        Address = (((PdptIndex << 9) + PdIndex) << 21);
> 
> -        if ((*Pte & IA32_PG_PS) != 0) {
> +        if ((*Pd & IA32_PG_PS) != 0) {
>            // 2MB page
> 
>            if (!IsAddressValid (Address, &Nx)) {
>              //
>              // Patch to remove Present flag and RW flag
>              //
> -            *Pte = *Pte & (INTN)(INT32)(~PAGE_ATTRIBUTE_BITS);
> +            *Pd = *Pd & (INTN)(INT32)(~PAGE_ATTRIBUTE_BITS);
>            }
>            if (Nx && mXdSupported) {
> -            *Pte = *Pte | IA32_PG_NX;
> +            *Pd = *Pd | IA32_PG_NX;
>            }
>          } else {
>            // 4KB page
> -          Pt = (UINT64 *)(UINTN)(*Pte & ~mAddressEncMask &
> PHYSICAL_ADDRESS_MASK);
> +          Pt = (UINT64 *)(UINTN)(*Pd & ~mAddressEncMask &
> + PHYSICAL_ADDRESS_MASK);
>            if (Pt == 0) {
>              continue;
>            }
> -          for (Level4 = 0; Level4 < SIZE_4KB / sizeof(*Pt); Level4++, Pt++) {
> +          for (PtIndex = 0; PtIndex < SIZE_4KB / sizeof(*Pt);
> + PtIndex++, Pt++) {
>              if (!IsAddressValid (Address, &Nx)) {
>                *Pt = *Pt & (INTN)(INT32)(~PAGE_ATTRIBUTE_BITS);
>              }
> @@ -702,9 +702,9 @@ InitPaging (
>              Address += SIZE_4KB;
>            } // end for PT
>          } // end if PS
> -      } // end for PTE
> -    } // end for PDE
> -  }
> +      } // end for PD
> +    } // end for PDPT
> +  } // end for PML4
> 
>    //
>    // Flush TLB
> --
> 2.21.0.windows.1
> 
> 
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#43413): https://edk2.groups.io/g/devel/message/43413
Mute This Topic: https://groups.io/mt/32295047/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list