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