]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c
ArmPkg/ArmMmuLib: don't replace table entries with block entries
[mirror_edk2.git] / ArmPkg / Library / ArmMmuLib / AArch64 / ArmMmuLibCore.c
index e5ecc737515386241b628e3c2997e967a580b40f..34f1031c4de316611476b52ae43fd42887663458 100644 (file)
@@ -197,12 +197,9 @@ UpdateRegionMappingRecursive (
     // than a block, and recurse to create the block or page entries at\r
     // the next level. No block mappings are allowed at all at level 0,\r
     // so in that case, we have to recurse unconditionally.\r
-    // If we are changing a table entry and the AttributeClearMask is non-zero,\r
-    // we cannot replace it with a block entry without potentially losing\r
-    // attribute information, so keep the table entry in that case.\r
     //\r
     if ((Level == 0) || (((RegionStart | BlockEnd) & BlockMask) != 0) ||\r
-        (IsTableEntry (*Entry, Level) && (AttributeClearMask != 0)))\r
+        IsTableEntry (*Entry, Level))\r
     {\r
       ASSERT (Level < 3);\r
 \r
@@ -294,20 +291,7 @@ UpdateRegionMappingRecursive (
       EntryValue |= (Level == 3) ? TT_TYPE_BLOCK_ENTRY_LEVEL3\r
                                  : TT_TYPE_BLOCK_ENTRY;\r
 \r
-      if (IsTableEntry (*Entry, Level)) {\r
-        //\r
-        // We are replacing a table entry with a block entry. This is only\r
-        // possible if we are keeping none of the original attributes.\r
-        // We can free the table entry's page table, and all the ones below\r
-        // it, since we are dropping the only possible reference to it.\r
-        //\r
-        ASSERT (AttributeClearMask == 0);\r
-        TranslationTable = (VOID *)(UINTN)(*Entry & TT_ADDRESS_MASK_BLOCK_ENTRY);\r
-        ReplaceTableEntry (Entry, EntryValue, RegionStart, TRUE);\r
-        FreePageTablesRecursive (TranslationTable, Level + 1);\r
-      } else {\r
-        ReplaceTableEntry (Entry, EntryValue, RegionStart, FALSE);\r
-      }\r
+      ReplaceTableEntry (Entry, EntryValue, RegionStart, FALSE);\r
     }\r
   }\r
 \r