public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Dandan Bi <dandan.bi@intel.com>
To: edk2-devel@lists.01.org
Cc: Liming Gao <liming.gao@intel.com>, Eric Dong <eric.dong@intel.com>
Subject: [patch 1/2] MdeModulePkg/HiiDB: Reorganize codes of exporting HII settings
Date: Fri, 12 Oct 2018 19:25:40 +0800	[thread overview]
Message-ID: <20181012112541.35880-2-dandan.bi@intel.com> (raw)
In-Reply-To: <20181012112541.35880-1-dandan.bi@intel.com>

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1235

Function "HiiGetConfigurationSetting" may be called
when HiiDatabase contents have been updated.
And it is just to call function "HiiGetDatabaseInfo" to
get the contents in HiiDatabase and call function
"HiiGetConfigRespInfo" and get the configuration response
string form HII drivers.

So here we can remove function "HiiGetConfigurationSetting"
and make caller to call "HiiGetDatabaseInfo" and
"HiiGetConfigRespInfo" directly.

And thus it also can distinguish which code blocks are to
operate HiiDatabase contents and which code blocks are not.
Then it's easy to know which code blocks should be atomic
when updating HiiDatabase contents.

Cc: Liming Gao <liming.gao@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
---
 .../Universal/HiiDatabaseDxe/Database.c       | 75 ++++++++-----------
 .../Universal/HiiDatabaseDxe/HiiDatabase.h    |  6 +-
 .../HiiDatabaseDxe/HiiDatabaseEntry.c         |  3 +-
 3 files changed, 37 insertions(+), 47 deletions(-)

diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c b/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c
index 664687796f..1e2724f126 100644
--- a/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c
+++ b/MdeModulePkg/Universal/HiiDatabaseDxe/Database.c
@@ -19,11 +19,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 
 EFI_HII_PACKAGE_LIST_HEADER    *gRTDatabaseInfoBuffer = NULL;
 EFI_STRING                     gRTConfigRespBuffer    = NULL;
 UINTN                          gDatabaseInfoSize = 0;
 UINTN                          gConfigRespSize = 0;
-BOOLEAN                        gExportConfigResp = TRUE;
+BOOLEAN                        gExportConfigResp = FALSE;
 UINTN                          gNvDefaultStoreSize = 0;
 SKU_ID                         gSkuId              = 0xFFFFFFFFFFFFFFFF;
 LIST_ENTRY                     gVarStorageList     = INITIALIZE_LIST_HEAD_VARIABLE (gVarStorageList);
 
 /**
@@ -3433,43 +3433,10 @@ HiiGetDatabaseInfo(
 
   return EFI_SUCCESS;
 
 }
 
-/**
-This  function mainly use to get and update configuration settings information.
-
-@param  This                   A pointer to the EFI_HII_DATABASE_PROTOCOL instance.
-
-@retval EFI_SUCCESS            Get the information successfully.
-@retval EFI_OUT_OF_RESOURCES   Not enough memory to store the Configuration Setting data.
-
-**/
-EFI_STATUS
-HiiGetConfigurationSetting(
-  IN CONST EFI_HII_DATABASE_PROTOCOL        *This
-  )
-{
-  EFI_STATUS                          Status;
-
-  //
-  // Get the HiiDatabase info.
-  //
-  Status = HiiGetDatabaseInfo(This);
-
-  //
-  // Get ConfigResp string
-  //
-  if (gExportConfigResp) {
-    Status = HiiGetConfigRespInfo (This);
-    gExportConfigResp = FALSE;
-  }
-  return Status;
-
-}
-
-
 /**
   This function adds the packages in the package list to the database and returns a handle. If there is a
   EFI_DEVICE_PATH_PROTOCOL associated with the DriverHandle, then this function will
   create a package of type EFI_PACKAGE_TYPE_DEVICE_PATH and add it to the package list.
 
@@ -3559,15 +3526,23 @@ HiiNewPackageList (
   }
 
   *Handle = DatabaseRecord->Handle;
 
   //
-  // Check whether need to get the Database and configuration setting info.
+  // Check whether need to get the Database info.
   // Only after ReadyToBoot, need to do the export.
   //
   if (gExportAfterReadyToBoot) {
-    HiiGetConfigurationSetting(This);
+    HiiGetDatabaseInfo (This);
+  }
+
+  //
+  // Check whether need to get the configuration setting info from HII drivers.
+  // When after ReadyToBoot and need to do the export for form package add.
+  //
+  if (gExportAfterReadyToBoot && gExportConfigResp) {
+    HiiGetConfigRespInfo (This);
   }
 
   return EFI_SUCCESS;
 }
 
@@ -3672,15 +3647,23 @@ HiiRemovePackageList (
       FreePool (HiiHandle);
       FreePool (Node->PackageList);
       FreePool (Node);
 
       //
-      // Check whether need to get the Database and configuration setting info.
+      // Check whether need to get the Database info.
       // Only after ReadyToBoot, need to do the export.
       //
       if (gExportAfterReadyToBoot) {
-        HiiGetConfigurationSetting(This);
+        HiiGetDatabaseInfo (This);
+      }
+
+      //
+      // Check whether need to get the configuration setting info from HII drivers.
+      // When after ReadyToBoot and need to do the export for form package remove.
+      //
+      if (gExportAfterReadyToBoot && gExportConfigResp) {
+        HiiGetConfigRespInfo (This);
       }
       return EFI_SUCCESS;
     }
   }
 
@@ -3788,17 +3771,23 @@ HiiUpdatePackageList (
       // Add all of the packages within the new package list
       //
       Status = AddPackages (Private, EFI_HII_DATABASE_NOTIFY_ADD_PACK, PackageList, Node);
 
       //
-      // Check whether need to get the Database and configuration setting info.
+      // Check whether need to get the Database info.
       // Only after ReadyToBoot, need to do the export.
       //
-      if (gExportAfterReadyToBoot) {
-        if (Status == EFI_SUCCESS){
-          HiiGetConfigurationSetting(This);
-        }
+      if (gExportAfterReadyToBoot && Status == EFI_SUCCESS) {
+        HiiGetDatabaseInfo (This);
+      }
+
+      //
+      // Check whether need to get the configuration setting info from HII drivers.
+      // When after ReadyToBoot and need to do the export for form package update.
+      //
+      if (gExportAfterReadyToBoot && gExportConfigResp && Status == EFI_SUCCESS) {
+        HiiGetConfigRespInfo (This);
       }
 
       return Status;
     }
   }
diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h
index 4391625a9f..3a6eb8a55c 100644
--- a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h
+++ b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h
@@ -2327,25 +2327,25 @@ This function mainly use to get HiiDatabase information.
 @retval EFI_SUCCESS            Get the information successfully.
 @retval EFI_OUT_OF_RESOURCES   Not enough memory to store the Hiidatabase data.
 
 **/
 EFI_STATUS
-HiiGetDatabaseInfo(
+HiiGetDatabaseInfo (
   IN CONST EFI_HII_DATABASE_PROTOCOL        *This
   );
 
 /**
-This is an internal function,mainly use to get and update configuration settings information.
+This function mainly use to get and update ConfigResp string.
 
 @param  This                   A pointer to the EFI_HII_DATABASE_PROTOCOL instance.
 
 @retval EFI_SUCCESS            Get the information successfully.
 @retval EFI_OUT_OF_RESOURCES   Not enough memory to store the Configuration Setting data.
 
 **/
 EFI_STATUS
-HiiGetConfigurationSetting(
+HiiGetConfigRespInfo (
   IN CONST EFI_HII_DATABASE_PROTOCOL        *This
   );
 
 //
 // Global variables
diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
index 5951b5e304..1a71798ac0 100644
--- a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
+++ b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseEntry.c
@@ -142,11 +142,12 @@ OnReadyToBoot (
 {
   //
   // When ready to boot, we begin to export the HiiDatabase date.
   // And hook all the possible HiiDatabase change actions to export data.
   //
-  HiiGetConfigurationSetting(&mPrivate.HiiDatabase);
+  HiiGetDatabaseInfo (&mPrivate.HiiDatabase);
+  HiiGetConfigRespInfo (&mPrivate.HiiDatabase);
   gExportAfterReadyToBoot = TRUE;
 
   gBS->CloseEvent (Event);
 }
 
-- 
2.18.0.windows.1



  reply	other threads:[~2018-10-12 11:26 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-12 11:25 [patch 0/2] MdeModulePkg/HiiDatabaseDxe: Make sure database update behaviors are atomic Dandan Bi
2018-10-12 11:25 ` Dandan Bi [this message]
2018-10-12 11:25 ` [patch 2/2] MdeModulePkg/HiiDB: " Dandan Bi
2018-10-26  2:04 ` [patch 0/2] MdeModulePkg/HiiDatabaseDxe: " Gao, Liming

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=20181012112541.35880-2-dandan.bi@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