]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/FaultTolerantWriteDxe/FtwMisc.c
Add more exact SMM check in SmmFaultTolerantWriteHandler.
[mirror_edk2.git] / MdeModulePkg / Universal / FaultTolerantWriteDxe / FtwMisc.c
index 482753f62cbb5fad9d59b32b92448347ec95f79c..f1d64942b47c294cfad2fe5ad19e55f85ccaeced 100644 (file)
@@ -572,6 +572,9 @@ FlushSpareBlockToWorkingBlock (
   if (Buffer == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
+\r
+  WorkSpaceLbaOffset = FtwDevice->FtwWorkSpaceLba - FtwDevice->FtwWorkBlockLba;\r
+\r
   //\r
   // To guarantee that the WorkingBlockValid is set on spare block\r
   //\r
@@ -581,7 +584,7 @@ FlushSpareBlockToWorkingBlock (
   //\r
   FtwUpdateFvState (\r
     FtwDevice->FtwBackupFvb,\r
-    FtwDevice->FtwWorkSpaceLba,\r
+    FtwDevice->FtwSpareLba + WorkSpaceLbaOffset,\r
     FtwDevice->FtwWorkSpaceBase + sizeof (EFI_GUID) + sizeof (UINT32),\r
     WORKING_BLOCK_VALID\r
     );\r
@@ -608,7 +611,6 @@ FlushSpareBlockToWorkingBlock (
   //\r
   // Clear the CRC and STATE, copy data from spare to working block.\r
   //\r
-  WorkSpaceLbaOffset = FtwDevice->FtwWorkSpaceLba - FtwDevice->FtwWorkBlockLba;\r
   WorkingBlockHeader = (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *) (Buffer + (UINTN) WorkSpaceLbaOffset * FtwDevice->BlockSize + FtwDevice->FtwWorkSpaceBase);\r
   InitWorkSpaceHeader (WorkingBlockHeader);\r
   WorkingBlockHeader->WorkingBlockValid   = FTW_ERASE_POLARITY;\r