[edk2-devel] [PATCH 1/3] UefiCpuPkg/PiSmmCpu: Add Internal function IsStaticPageTableEnabled

Laszlo Ersek lersek at redhat.com
Mon Jul 29 11:33:16 UTC 2019


Hi Ray,

On 07/27/19 05:28, Ni, Ray wrote:
> The internal function reflects the status whether static page table
> is enabled.
> 
> Signed-off-by: Ray Ni <ray.ni at intel.com>
> Cc: Laszlo Ersek <lersek at redhat.com>
> Cc: Eric Dong <eric.dong at intel.com.
> ---
>  UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c   | 16 ++++++++++++++++
>  UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h | 15 +++++++++++++++
>  UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c    | 16 ++++++++++++++++
>  3 files changed, 47 insertions(+)
> 
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c
> index 05fb455936..2a9af4b77d 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/PageTbl.c
> @@ -28,6 +28,22 @@ EnableCet (
>    VOID
>    );
>  
> +/**
> +  Return whether Static Page Table is enabled.
> +
> +  Note: Static Page Table is always disabled for IA32 build.
> +
> +  @retval TRUE  Static Page Table is enabled.
> +  @retval FALSE Static Page Table is disabled.
> +**/
> +BOOLEAN
> +IsStaticPageTableEnabled (
> +  VOID
> +  )
> +{
> +  return FALSE;
> +}
> +
>  /**
>    Create PageTable for SMM use.
>  
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
> index 186809f431..14b7676c16 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
> @@ -1267,6 +1267,21 @@ EFIAPI
>  PiSmmCpuSmiEntryFixupAddress (
>   );
>  
> +
> +/**
> +  Return whether Static Page Table is enabled.
> +
> +  Note: Static Page Table is always disabled for IA32 build.
> +
> +  @retval TRUE  Static Page Table is enabled.
> +  @retval FALSE Static Page Table is disabled.
> +**/
> +BOOLEAN
> +IsStaticPageTableEnabled (
> +  VOID
> +  )
> +;
> +
>  /**
>    This function reads CR2 register when on-demand paging is enabled
>    for 64 bit and no action for 32 bit.
> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c
> index a3b62f7787..18e3f9e08d 100644
> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c
> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/PageTbl.c
> @@ -37,6 +37,22 @@ EnableCet (
>    VOID
>    );
>  
> +/**
> +  Return whether Static Page Table is enabled.
> +
> +  Note: Static Page Table is always disabled for IA32 build.
> +
> +  @retval TRUE  Static Page Table is enabled.
> +  @retval FALSE Static Page Table is disabled.
> +**/
> +BOOLEAN
> +IsStaticPageTableEnabled (
> +  VOID
> +  )
> +{
> +  return mCpuSmmStaticPageTable;
> +}
> +
>  /**
>    Check if 1-GByte pages is supported by processor or not.
>  
> 

I like the approach in this patch; however I think the IA32
implementation (and comments) are wrong. The function should return
constant TRUE on IA32.

"static paging" means that all page tables used in SMM are built in
advance. When "static paging" is off (= "dynamic paging" is enabled),
then page tables are built in SMM on-demand, based on individual page
faults. (This is my understanding anyway.)

And in the IA32 build, the page tables are always built in advance, to
my understanding. Hence "static paging" should be reported as "on".

The mistake in this patch (patch#1) is apparent in patch#2. Patch#2
seems good (I'll comment on it separately), but because of the incorrect
IA32 implementation in patch#1, patch#2 ends up changing the behavior on
IA32.

Thanks
Laszlo

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

View/Reply Online (#44514): https://edk2.groups.io/g/devel/message/44514
Mute This Topic: https://groups.io/mt/32616001/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