On 09/16/15 10:15, Jeff Fan wrote:
> SmmServicesTableLib instance only supports DXE_SMM_DRIVER type drivers that
> will be loaded into SMM range. InSmm() could return TRUE directly.
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Jeff Fan <[email protected]>
> CC: Liming Gao <[email protected]>
> CC: Jiewen Yao <[email protected]>
> CC: Michael D Kinney <[email protected]>
> ---
>  .../SmmServicesTableLib/SmmServicesTableLib.c      | 30 
> +++++++---------------
>  1 file changed, 9 insertions(+), 21 deletions(-)

I tested this patch (well, commit, at this point) against regressions
with the pending OVMF SMM series.

It works fine; the new (unconditional) ASSERT() is not triggered.

Thanks
Laszlo

> 
> diff --git a/MdePkg/Library/SmmServicesTableLib/SmmServicesTableLib.c 
> b/MdePkg/Library/SmmServicesTableLib/SmmServicesTableLib.c
> index 23a85a0..81e5ce8 100644
> --- a/MdePkg/Library/SmmServicesTableLib/SmmServicesTableLib.c
> +++ b/MdePkg/Library/SmmServicesTableLib/SmmServicesTableLib.c
> @@ -1,7 +1,7 @@
>  /** @file
>    SMM Services Table Library.
>  
> -  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of the BSD 
> License
>    which accompanies this distribution.  The full text of the license may be 
> found at
> @@ -18,7 +18,6 @@
>  #include <Library/DebugLib.h>
>  
>  EFI_SMM_SYSTEM_TABLE2   *gSmst             = NULL;
> -EFI_SMM_BASE2_PROTOCOL  *mInternalSmmBase2 = NULL;
>  
>  /**
>    The constructor function caches the pointer of SMM Services Table.
> @@ -36,8 +35,10 @@ SmmServicesTableLibConstructor (
>    IN EFI_SYSTEM_TABLE  *SystemTable
>    )
>  {
> -  EFI_STATUS  Status;
> +  EFI_STATUS              Status;
> +  EFI_SMM_BASE2_PROTOCOL  *InternalSmmBase2;
>  
> +  InternalSmmBase2 = NULL;
>    //
>    // Retrieve SMM Base2 Protocol,  Do not use gBS from 
> UefiBootServicesTableLib on purpose
>    // to prevent inclusion of gBS, gST, and gImageHandle from SMM Drivers 
> unless the 
> @@ -46,25 +47,15 @@ SmmServicesTableLibConstructor (
>    Status = SystemTable->BootServices->LocateProtocol (
>                                          &gEfiSmmBase2ProtocolGuid,
>                                          NULL,
> -                                        (VOID **)&mInternalSmmBase2
> +                                        (VOID **)&InternalSmmBase2
>                                          );
>    ASSERT_EFI_ERROR (Status);
> -  ASSERT (mInternalSmmBase2 != NULL);
> -
> -  //
> -  // Check to see if we are already in SMM
> -  //
> -  if (!InSmm ()) {
> -    //
> -    // We are not in SMM, so SMST is not needed
> -    //
> -    return EFI_SUCCESS;
> -  }
> +  ASSERT (InternalSmmBase2 != NULL);
>  
>    //
>    // We are in SMM, retrieve the pointer to SMM System Table
>    //
> -  mInternalSmmBase2->GetSmstLocation (mInternalSmmBase2, &gSmst);
> +  InternalSmmBase2->GetSmstLocation (InternalSmmBase2, &gSmst);
>    ASSERT (gSmst != NULL);
>  
>    return EFI_SUCCESS;
> @@ -87,11 +78,8 @@ InSmm (
>    VOID
>    )
>  {
> -  BOOLEAN  InSmm;
> -
>    //
> -  // Check to see if we are already in SMM
> +  // We are already in SMM
>    //
> -  mInternalSmmBase2->InSmm (mInternalSmmBase2, &InSmm);
> -  return InSmm;
> +  return TRUE;
>  }
> 

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to