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