From 36873a61950d71596206567e58a0319e0813d05d Mon Sep 17 00:00:00 2001
From: qwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Date: Tue, 9 Oct 2007 05:42:37 +0000
Subject: Fix a bug. FindVariable now search volatile variable first
 (previously NV variable first) for performance reason. Therefore,
 RuntimeServiceGetNextVariableName is updated based on this change.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4056 6f19259b-4bc3-4df7-8a09-765794883524
---
 MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

(limited to 'MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c')

diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
index 11a36ba826..34bc4a8e15 100644
--- a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
+++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
@@ -737,6 +737,8 @@ Returns:
 
   //
   // 0: Volatile, 1: Non-Volatile
+  // The index and attributes mapping must be kept in this order as RuntimeServiceGetNextVariableName
+  // make use of this mapping to implement search algorithme.
   //
   VariableStoreHeader[0]  = (VARIABLE_STORE_HEADER *) ((UINTN) mVariableModuleGlobal->VariableGlobal.VolatileVariableBase);
   VariableStoreHeader[1]  = (VARIABLE_STORE_HEADER *) ((UINTN) mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase);
@@ -933,9 +935,9 @@ RuntimeServiceGetNextVariableName (
     //
     if (Variable.CurrPtr >= Variable.EndPtr || Variable.CurrPtr == NULL) {
       Variable.Volatile = (BOOLEAN) (Variable.Volatile ^ ((BOOLEAN) 0x1));
-      if (Variable.Volatile) {
-        Variable.StartPtr = (VARIABLE_HEADER *) ((UINTN) (mVariableModuleGlobal->VariableGlobal.VolatileVariableBase + sizeof (VARIABLE_STORE_HEADER)));
-        Variable.EndPtr = (VARIABLE_HEADER *) GetEndPointer ((VARIABLE_STORE_HEADER *) ((UINTN) mVariableModuleGlobal->VariableGlobal.VolatileVariableBase));
+      if (!Variable.Volatile) {
+        Variable.StartPtr = (VARIABLE_HEADER *) ((UINTN) (mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase + sizeof (VARIABLE_STORE_HEADER)));
+        Variable.EndPtr = (VARIABLE_HEADER *) GetEndPointer ((VARIABLE_STORE_HEADER *) ((UINTN) mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase));
       } else {
         Status = EFI_NOT_FOUND;
         goto Done;
-- 
cgit v1.2.3