mirror of
https://github.com/reactos/reactos.git
synced 2024-10-05 08:54:40 +00:00
- Save original value of the free descriptor we're using to alloc early pages from.
- Fix handling of PFN database pages inside PFN: largest free descriptor does not always end with the highest usable physical page (MmPageArraySize). This removes the need for a "good hack" introduced in revision 32405. As a result, the memory above the largest free descriptor (if it exists) is now correctly marked in the PFN database as free and added to the unzeroed list. svn path=/trunk/; revision=32463
This commit is contained in:
parent
a68d895e4d
commit
fae9aa5c48
|
@ -19,6 +19,7 @@ extern PVOID MmPagedPoolBase;
|
|||
extern ULONG MmPagedPoolSize;
|
||||
|
||||
extern PMEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptor;
|
||||
extern MEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptorOrg;
|
||||
extern ULONG MmHighestPhysicalPage;
|
||||
extern PVOID MmPfnDatabase;
|
||||
|
||||
|
|
|
@ -371,17 +371,11 @@ MmInitializePageList(VOID)
|
|||
|
||||
/* Finally handle the pages describing the PFN database themselves */
|
||||
for (i = (MiFreeDescriptor->BasePage + MiFreeDescriptor->PageCount);
|
||||
i <= MmPageArraySize;
|
||||
i < (MiFreeDescriptorOrg.BasePage + MiFreeDescriptorOrg.PageCount);
|
||||
i++)
|
||||
{
|
||||
/* If this page was marked as free it should be removed from
|
||||
the unzeroed free pages list */
|
||||
if (MmPageArray[i].Flags.Type == MM_PHYSICAL_PAGE_FREE)
|
||||
{
|
||||
RemoveEntryList(&MmPageArray[i].ListEntry);
|
||||
UnzeroedPageCount--;
|
||||
MmStats.NrFreePages--;
|
||||
}
|
||||
/* Ensure this page was not added previously */
|
||||
ASSERT(MmPageArray[i].Flags.Type == 0);
|
||||
|
||||
/* Mark it as used kernel memory */
|
||||
MmPageArray[i] = UsedPage;
|
||||
|
|
|
@ -55,6 +55,7 @@ ULONG_PTR MiKSeg0Start, MiKSeg0End;
|
|||
PVOID MmPfnDatabase;
|
||||
ULONG_PTR MmPfnDatabaseEnd;
|
||||
PMEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptor;
|
||||
MEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptorOrg;
|
||||
extern KMUTANT MmSystemLoadLock;
|
||||
BOOLEAN MiDbgEnableMdDump =
|
||||
#ifdef _ARM_
|
||||
|
@ -246,6 +247,10 @@ MiCountFreePagesInLoaderBlock(PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Save original values of the free descriptor, since it'll be
|
||||
altered by early allocations */
|
||||
MiFreeDescriptorOrg = *MiFreeDescriptor;
|
||||
}
|
||||
|
||||
VOID
|
||||
|
|
Loading…
Reference in a new issue