CHAR MI_PFN_CURRENT_PROCESS_NAME[16] = "None yet";
/* FUNCTIONS ******************************************************************/
-
static
VOID
MiIncrementAvailablePages(
return PageIndex;
}
+/* HACK for keeping legacy Mm alive */
+extern BOOLEAN MmRosNotifyAvailablePage(PFN_NUMBER PageFrameIndex);
+
VOID
NTAPI
MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
ASSERT(Pfn1->u4.VerifierAllocation == 0);
ASSERT(Pfn1->u3.e2.ReferenceCount == 0);
+ /* HACK HACK HACK : Feed the page to legacy Mm */
+ if (MmRosNotifyAvailablePage(PageFrameIndex))
+ {
+ DPRINT1("Legacy Mm eating ARM3 page!.\n");
+ return;
+ }
+
/* Get the free page list and increment its count */
ListHead = &MmFreePageListHead;
ASSERT_LIST_INVARIANT(ListHead);
if ((ListHead->Total >= 8) && !(MmZeroingPageThreadActive))
{
/* Set the event */
- MmZeroingPageThreadActive = TRUE;
KeSetEvent(&MmZeroingPageEvent, IO_NO_INCREMENT, FALSE);
}
NTSTATUS
NTAPI
MiInitializeAndChargePfn(OUT PPFN_NUMBER PageFrameIndex,
- IN PMMPTE PointerPde,
+ IN PMMPDE PointerPde,
IN PFN_NUMBER ContainingPageFrame,
IN BOOLEAN SessionAllocation)
{
- MMPTE TempPte;
+ MMPDE TempPde;
KIRQL OldIrql;
/* Use either a global or local PDE */
- TempPte = SessionAllocation ? ValidKernelPdeLocal : ValidKernelPde;
+ TempPde = SessionAllocation ? ValidKernelPdeLocal : ValidKernelPde;
/* Lock the PFN database */
OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
/* Grab a zero page and set the PFN, then make it valid */
*PageFrameIndex = MiRemoveZeroPage(MI_GET_NEXT_COLOR());
- TempPte.u.Hard.PageFrameNumber = *PageFrameIndex;
- MI_WRITE_VALID_PTE(PointerPde, TempPte);
+ TempPde.u.Hard.PageFrameNumber = *PageFrameIndex;
+ MI_WRITE_VALID_PDE(PointerPde, TempPde);
/* Initialize the PFN */
MiInitializePfnForOtherProcess(*PageFrameIndex,
VOID
NTAPI
MiInitializePfnForOtherProcess(IN PFN_NUMBER PageFrameIndex,
- IN PMMPTE PointerPte,
+ IN PVOID PteAddress,
IN PFN_NUMBER PteFrame)
{
PMMPFN Pfn1;
/* Setup the PTE */
Pfn1 = MI_PFN_ELEMENT(PageFrameIndex);
- Pfn1->PteAddress = PointerPte;
+ Pfn1->PteAddress = PteAddress;
/* Make this a software PTE */
MI_MAKE_SOFTWARE_PTE(&Pfn1->OriginalPte, MM_READWRITE);