[NTOS/MM]
[reactos.git] / reactos / ntoskrnl / mm / ARM3 / pfnlist.c
index 959f261..8fc607c 100644 (file)
@@ -64,7 +64,6 @@ ULONG MI_PFN_CURRENT_USAGE;
 CHAR MI_PFN_CURRENT_PROCESS_NAME[16] = "None yet";
 
 /* FUNCTIONS ******************************************************************/
-
 static
 VOID
 MiIncrementAvailablePages(
@@ -597,6 +596,9 @@ MiRemoveZeroPage(IN ULONG Color)
     return PageIndex;
 }
 
+/* HACK for keeping legacy Mm alive */
+extern BOOLEAN MmRosNotifyAvailablePage(PFN_NUMBER PageFrameIndex);
+
 VOID
 NTAPI
 MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
@@ -624,6 +626,13 @@ 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);
@@ -695,7 +704,6 @@ MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
     if ((ListHead->Total >= 8) && !(MmZeroingPageThreadActive))
     {
         /* Set the event */
-        MmZeroingPageThreadActive = TRUE;
         KeSetEvent(&MmZeroingPageEvent, IO_NO_INCREMENT, FALSE);
     }
 
@@ -1083,15 +1091,15 @@ MiInitializePfnAndMakePteValid(IN PFN_NUMBER PageFrameIndex,
 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);
@@ -1106,8 +1114,8 @@ MiInitializeAndChargePfn(OUT PPFN_NUMBER PageFrameIndex,
 
     /* 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,
@@ -1270,14 +1278,14 @@ MiDecrementReferenceCount(IN PMMPFN Pfn1,
 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);