From: "Gao, Liming" <liming.gao@intel.com>
To: "Zeng, Star" <star.zeng@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Kinney, Michael D" <michael.d.kinney@intel.com>,
"Chan, Amy" <amy.chan@intel.com>,
"Yao, Jiewen" <jiewen.yao@intel.com>,
"Zeng, Star" <star.zeng@intel.com>
Subject: Re: [PATCH] MdePkg DxeHobLib: Make GetHobList working before Constructor is called
Date: Fri, 20 Jan 2017 07:26:23 +0000 [thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14D6D1DEC@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <1484557638-172800-1-git-send-email-star.zeng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
>-----Original Message-----
>From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Star
>Zeng
>Sent: Monday, January 16, 2017 5:07 PM
>To: edk2-devel@lists.01.org
>Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Chan, Amy
><amy.chan@intel.com>; Yao, Jiewen <jiewen.yao@intel.com>; Gao, Liming
><liming.gao@intel.com>; Zeng, Star <star.zeng@intel.com>
>Subject: [edk2] [PATCH] MdePkg DxeHobLib: Make GetHobList working
>before Constructor is called
>
>The latest PiSmmCore driver added several debug messages in the
>function SmmAddMemoryRegion in Page.c. The function
>SmmAddMemoryRegion
>is called by the library constructor
>PiSmmCoreMemoryAllocationLibConstructor.
>
>When PiSmmCoreMemoryAllocationLibConstructor is executed, the
>constructor of DxeHobLib (HobLibConstructor in HobLib.c) is not
>executed yet. But platform instance of DebugLib may need get hob
>before printing any message. As a result, an ASSERT happens in the
>function GetHobList.
>
>The patch is to update GetHobList to get HOB list from system
>configuration table when the HOB list is not retrieved and not cached
>yet, and HobLibConstructor is also to be updated to just call
>GetHobList.
>
>Cc: Jiewen Yao <jiewen.yao@intel.com>
>Cc: Liming Gao <liming.gao@intel.com>
>Cc: Michael Kinney <michael.d.kinney@intel.com>
>Cc: Amy Chan <amy.chan@intel.com>
>Contributed-under: TianoCore Contribution Agreement 1.0
>Signed-off-by: Star Zeng <star.zeng@intel.com>
>---
> MdePkg/Library/DxeHobLib/HobLib.c | 67 ++++++++++++++++++++-----------
>--------
> 1 file changed, 34 insertions(+), 33 deletions(-)
>
>diff --git a/MdePkg/Library/DxeHobLib/HobLib.c
>b/MdePkg/Library/DxeHobLib/HobLib.c
>index c6c04e6a5924..bb65206b044a 100644
>--- a/MdePkg/Library/DxeHobLib/HobLib.c
>+++ b/MdePkg/Library/DxeHobLib/HobLib.c
>@@ -1,7 +1,7 @@
> /** @file
> HOB Library implemenation for Dxe Phase.
>
>-Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
>+Copyright (c) 2006 - 2017, 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
>@@ -24,35 +24,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY
>KIND, EITHER EXPRESS OR IMPLIED.
> VOID *mHobList = NULL;
>
> /**
>- The constructor function caches the pointer to HOB list.
>-
>- The constructor function gets the start address of HOB list from system
>configuration table.
>- It will ASSERT() if that operation fails and it will always return EFI_SUCCESS.
>-
>- @param ImageHandle The firmware allocated handle for the EFI image.
>- @param SystemTable A pointer to the EFI System Table.
>-
>- @retval EFI_SUCCESS The constructor successfully gets HobList.
>- @retval Other value The constructor can't get HobList.
>-
>-**/
>-EFI_STATUS
>-EFIAPI
>-HobLibConstructor (
>- IN EFI_HANDLE ImageHandle,
>- IN EFI_SYSTEM_TABLE *SystemTable
>- )
>-{
>- EFI_STATUS Status;
>-
>- Status = EfiGetSystemConfigurationTable (&gEfiHobListGuid, &mHobList);
>- ASSERT_EFI_ERROR (Status);
>- ASSERT (mHobList != NULL);
>-
>- return Status;
>-}
>-
>-/**
> Returns the pointer to the HOB list.
>
> This function returns the pointer to first HOB in the list.
>@@ -62,9 +33,11 @@ HobLibConstructor (
> Since the System Configuration Table does not exist that the time the DXE
>Core is
> launched, the DXE Core uses a global variable from the DXE Core Entry Point
>Library
> to manage the pointer to the HOB list.
>-
>+
> If the pointer to the HOB list is NULL, then ASSERT().
>-
>+
>+ This function also caches the pointer to the HOB list retrieved.
>+
> @return The pointer to the HOB list.
>
> **/
>@@ -74,11 +47,39 @@ GetHobList (
> VOID
> )
> {
>- ASSERT (mHobList != NULL);
>+ EFI_STATUS Status;
>+
>+ if (mHobList == NULL) {
>+ Status = EfiGetSystemConfigurationTable (&gEfiHobListGuid, &mHobList);
>+ ASSERT_EFI_ERROR (Status);
>+ ASSERT (mHobList != NULL);
>+ }
> return mHobList;
> }
>
> /**
>+ The constructor function caches the pointer to HOB list by calling
>GetHobList()
>+ and will always return EFI_SUCCESS.
>+
>+ @param ImageHandle The firmware allocated handle for the EFI image.
>+ @param SystemTable A pointer to the EFI System Table.
>+
>+ @retval EFI_SUCCESS The constructor successfully gets HobList.
>+
>+**/
>+EFI_STATUS
>+EFIAPI
>+HobLibConstructor (
>+ IN EFI_HANDLE ImageHandle,
>+ IN EFI_SYSTEM_TABLE *SystemTable
>+ )
>+{
>+ GetHobList ();
>+
>+ return EFI_SUCCESS;
>+}
>+
>+/**
> Returns the next instance of a HOB type from the starting HOB.
>
> This function searches the first instance of a HOB type from the starting HOB
>pointer.
>--
>2.7.0.windows.1
>
>_______________________________________________
>edk2-devel mailing list
>edk2-devel@lists.01.org
>https://lists.01.org/mailman/listinfo/edk2-devel
prev parent reply other threads:[~2017-01-20 7:26 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-16 9:07 [PATCH] MdePkg DxeHobLib: Make GetHobList working before Constructor is called Star Zeng
2017-01-20 7:26 ` Gao, Liming [this message]
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=4A89E2EF3DFEDB4C8BFDE51014F606A14D6D1DEC@shsmsx102.ccr.corp.intel.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