summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c
diff options
context:
space:
mode:
authorlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>2012-09-14 06:54:35 +0000
committerlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>2012-09-14 06:54:35 +0000
commitd26c7e82f2bf80dd2a64b61fee33a3f3f5e01d5a (patch)
treeb6fd1300299f4041b03861ead824d9a5b19ccf6d /MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c
parent42ed76042a117057d819218164dd9cddff1ae7a0 (diff)
downloadedk2-platforms-d26c7e82f2bf80dd2a64b61fee33a3f3f5e01d5a.tar.xz
Fix the issue that FTW driver fail to reclaim WorkSpace.
Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Hengyan Tao <hengyan.tao@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13732 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c')
-rw-r--r--MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c
index 482753f62c..f1d64942b4 100644
--- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c
+++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c
@@ -572,6 +572,9 @@ FlushSpareBlockToWorkingBlock (
if (Buffer == NULL) {
return EFI_OUT_OF_RESOURCES;
}
+
+ WorkSpaceLbaOffset = FtwDevice->FtwWorkSpaceLba - FtwDevice->FtwWorkBlockLba;
+
//
// To guarantee that the WorkingBlockValid is set on spare block
//
@@ -581,7 +584,7 @@ FlushSpareBlockToWorkingBlock (
//
FtwUpdateFvState (
FtwDevice->FtwBackupFvb,
- FtwDevice->FtwWorkSpaceLba,
+ FtwDevice->FtwSpareLba + WorkSpaceLbaOffset,
FtwDevice->FtwWorkSpaceBase + sizeof (EFI_GUID) + sizeof (UINT32),
WORKING_BLOCK_VALID
);
@@ -608,7 +611,6 @@ FlushSpareBlockToWorkingBlock (
//
// Clear the CRC and STATE, copy data from spare to working block.
//
- WorkSpaceLbaOffset = FtwDevice->FtwWorkSpaceLba - FtwDevice->FtwWorkBlockLba;
WorkingBlockHeader = (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *) (Buffer + (UINTN) WorkSpaceLbaOffset * FtwDevice->BlockSize + FtwDevice->FtwWorkSpaceBase);
InitWorkSpaceHeader (WorkingBlockHeader);
WorkingBlockHeader->WorkingBlockValid = FTW_ERASE_POLARITY;