9b18845a4b4cd1d2cf004cbc1cadf8a93ccb37ea changed the code which read from physical MMIO address to read from memory cache.
The patch adds some missing changes for it. I found them when updating code for https://bugzilla.tianocore.org/show_bug.cgi?id=1323 Merge EmuVariable and Real variable driver. Cc: Jian J Wang <jian.j.w...@intel.com> Cc: Hao Wu <hao.a...@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng <star.z...@intel.com> --- MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c | 12 +++++------- MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c | 6 +++--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c index 443cf07144a1..99d487adac9e 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c @@ -16,7 +16,7 @@ VariableServiceSetVariable() should also check authenticate data to avoid buffer overflow, integer overflow. It should also check attribute to avoid authentication bypass. -Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR> (C) Copyright 2015-2018 Hewlett Packard Enterprise Development LP<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -262,13 +262,12 @@ UpdateVariableStore ( UINT8 *CurrBuffer; EFI_LBA LbaNumber; UINTN Size; - EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader; VARIABLE_STORE_HEADER *VolatileBase; EFI_PHYSICAL_ADDRESS FvVolHdr; EFI_PHYSICAL_ADDRESS DataPtr; EFI_STATUS Status; - FwVolHeader = NULL; + FvVolHdr = 0; DataPtr = DataPtrIndex; // @@ -281,7 +280,6 @@ UpdateVariableStore ( Status = Fvb->GetPhysicalAddress(Fvb, &FvVolHdr); ASSERT_EFI_ERROR (Status); - FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) FvVolHdr); // // Data Pointer should point to the actual Address where data is to be // written. @@ -290,7 +288,7 @@ UpdateVariableStore ( DataPtr += mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase; } - if ((DataPtr + DataSize) > ((EFI_PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) FwVolHeader + FwVolHeader->FvLength))) { + if ((DataPtr + DataSize) > (FvVolHdr + mNvFvHeaderCache->FvLength)) { return EFI_OUT_OF_RESOURCES; } } else { @@ -317,7 +315,7 @@ UpdateVariableStore ( // // If we are here we are dealing with Non-Volatile Variables. // - LinearOffset = (UINTN) FwVolHeader; + LinearOffset = (UINTN) FvVolHdr; CurrWritePtr = (UINTN) DataPtr; CurrWriteSize = DataSize; CurrBuffer = Buffer; @@ -2739,7 +2737,7 @@ UpdateVariable ( } } - State = Variable->CurrPtr->State; + State = CacheVariable->CurrPtr->State; State &= VAR_DELETED; Status = UpdateVariableStore ( diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c index 23186176be75..f7185df3a7eb 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c @@ -3,7 +3,7 @@ and volatile storage space and install variable architecture protocol. Copyright (C) 2013, Red Hat, Inc. -Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR> (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -402,8 +402,8 @@ FtwNotificationEvent ( // // Mark the variable storage region of the FLASH as RUNTIME. // - VariableStoreBase = NvStorageVariableBase + (((EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)(NvStorageVariableBase))->HeaderLength); - VariableStoreLength = ((VARIABLE_STORE_HEADER *)(UINTN)VariableStoreBase)->Size; + VariableStoreBase = NvStorageVariableBase + mNvFvHeaderCache->HeaderLength; + VariableStoreLength = mNvVariableCache->Size; BaseAddress = VariableStoreBase & (~EFI_PAGE_MASK); Length = VariableStoreLength + (VariableStoreBase - BaseAddress); Length = (Length + EFI_PAGE_SIZE - 1) & (~EFI_PAGE_MASK); -- 2.7.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel