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