// 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
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