mirror of
https://github.com/reactos/reactos.git
synced 2025-01-13 01:22:03 +00:00
[NTOS]: Fix definition of unused MI_MAKE_SOFTWARE_PTE macro.
[NTOS]: Correctly setup the PFN entries for freshly allocated paged pool pages. Fixes a problem where the page could've still had stale/garbage data. [NTOS]: Add some extra assertions in the code to catch memory corruption and detect invalid logic. [NTOS]: Fix some typos in the code (comments/whitespace). [NTOS]: Make the dreaded page fault message that breaks paged pool on some systems more verbose for future debugging. svn path=/trunk/; revision=47189
This commit is contained in:
parent
931fc122a0
commit
df33b38ed0
5 changed files with 19 additions and 22 deletions
|
@ -491,7 +491,7 @@ MiFreeContiguousMemory(IN PVOID BaseAddress)
|
|||
StartPfn = Pfn1;
|
||||
Pfn1->u3.e1.StartOfAllocation = 0;
|
||||
|
||||
/* Look the PFNs until we find the one that marks the end of the allocation */
|
||||
/* Loop the PFNs until we find the one that marks the end of the allocation */
|
||||
do
|
||||
{
|
||||
/* Make sure these are the pages we setup in the allocation routine */
|
||||
|
@ -530,14 +530,14 @@ MiFreeContiguousMemory(IN PVOID BaseAddress)
|
|||
//
|
||||
// Loop all the pages
|
||||
//
|
||||
LastPage = PageFrameIndex + PageCount;
|
||||
LastPage = PageFrameIndex + PageCount;
|
||||
do
|
||||
{
|
||||
//
|
||||
// Free each one, and move on
|
||||
//
|
||||
MmReleasePageMemoryConsumer(MC_NPPOOL, PageFrameIndex);
|
||||
} while (++PageFrameIndex < LastPage);
|
||||
MmReleasePageMemoryConsumer(MC_NPPOOL, PageFrameIndex++);
|
||||
} while (PageFrameIndex < LastPage);
|
||||
|
||||
//
|
||||
// Release the PFN lock
|
||||
|
|
|
@ -117,7 +117,7 @@
|
|||
//
|
||||
// Creates a software PTE with the given protection
|
||||
//
|
||||
#define MI_MAKE_SOFTWARE_PTE(x) ((x) << MM_PTE_SOFTWARE_PROTECTION_BITS)
|
||||
#define MI_MAKE_SOFTWARE_PTE(p, x) ((p)->u.Long = (x << MM_PTE_SOFTWARE_PROTECTION_BITS))
|
||||
|
||||
//
|
||||
// Special values for LoadedImports
|
||||
|
|
|
@ -324,7 +324,7 @@ MmArmAccessFault(IN BOOLEAN StoreInstruction,
|
|||
//
|
||||
// This might happen...not sure yet
|
||||
//
|
||||
DPRINT1("FAULT ON PAGE TABLES!\n");
|
||||
DPRINT1("FAULT ON PAGE TABLES: %p %lx %lx!\n", Address, *PointerPte, *PointerPde);
|
||||
|
||||
//
|
||||
// Map in the page table
|
||||
|
|
|
@ -595,14 +595,15 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
|
|||
//
|
||||
PageFrameNumber = MmAllocPage(MC_NPPOOL);
|
||||
|
||||
//
|
||||
// Get the PFN entry for it
|
||||
//
|
||||
/* Get the PFN entry for it and fill it out */
|
||||
Pfn1 = MiGetPfnEntry(PageFrameNumber);
|
||||
Pfn1->u3.e2.ReferenceCount = 1;
|
||||
Pfn1->u2.ShareCount = 1;
|
||||
Pfn1->PteAddress = PointerPte;
|
||||
Pfn1->u3.e1.PageLocation = ActiveAndValid;
|
||||
Pfn1->u4.VerifierAllocation = 0;
|
||||
|
||||
//
|
||||
// Write the PTE for it
|
||||
//
|
||||
/* Write the PTE for it */
|
||||
TempPte.u.Hard.PageFrameNumber = PageFrameNumber;
|
||||
ASSERT(PointerPte->u.Hard.Valid == 0);
|
||||
ASSERT(TempPte.u.Hard.Valid == 1);
|
||||
|
|
|
@ -153,7 +153,6 @@ MmCreateKernelStack(IN BOOLEAN GuiStack,
|
|||
// Next PTE
|
||||
//
|
||||
PointerPte++;
|
||||
ASSERT(PointerPte->u.Hard.Valid == 0);
|
||||
|
||||
//
|
||||
// Get a page
|
||||
|
@ -164,6 +163,8 @@ MmCreateKernelStack(IN BOOLEAN GuiStack,
|
|||
//
|
||||
// Write it
|
||||
//
|
||||
ASSERT(PointerPte->u.Hard.Valid == 0);
|
||||
ASSERT(TempPte.u.Hard.Valid == 1);
|
||||
*PointerPte = TempPte;
|
||||
}
|
||||
|
||||
|
@ -243,26 +244,21 @@ MmGrowKernelStackEx(IN PVOID StackPointer,
|
|||
// Acquire the PFN DB lock
|
||||
//
|
||||
OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
|
||||
|
||||
|
||||
//
|
||||
// Loop each stack page
|
||||
//
|
||||
while (LimitPte >= NewLimitPte)
|
||||
{
|
||||
//
|
||||
// Sanity check
|
||||
//
|
||||
ASSERT(LimitPte->u.Hard.Valid == 0);
|
||||
|
||||
//
|
||||
// Get a page
|
||||
//
|
||||
PageFrameIndex = MmAllocPage(MC_NPPOOL);
|
||||
TempPte.u.Hard.PageFrameNumber = PageFrameIndex;
|
||||
|
||||
//
|
||||
// Write it
|
||||
//
|
||||
/* Write the valid PTE */
|
||||
ASSERT(LimitPte->u.Hard.Valid == 0);
|
||||
ASSERT(TempPte.u.Hard.Valid == 1);
|
||||
*LimitPte-- = TempPte;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue