[ros-diffs] [sir_richard] 49558: [NTOS]: Use MI_PFN_ELEMENT in this code, as the extra checks done by MiGetPfnEntry are irrelevant and slow things down. [NTOS]: Remove some old ReactOS hacks before we had MMRO...

sir_richard at svn.reactos.org sir_richard at svn.reactos.org
Thu Nov 11 13:13:05 UTC 2010


Author: sir_richard
Date: Thu Nov 11 13:13:05 2010
New Revision: 49558

URL: http://svn.reactos.org/svn/reactos?rev=49558&view=rev
Log:
[NTOS]: Use MI_PFN_ELEMENT in this code, as the extra checks done by MiGetPfnEntry are irrelevant and slow things down.
[NTOS]: Remove some old ReactOS hacks before we had MMROSPFNDATA.

Modified:
    trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c

Modified: trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c?rev=49558&r1=49557&r2=49558&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c [iso-8859-1] Thu Nov 11 13:13:05 2010
@@ -113,7 +113,7 @@
     if (OldFlink != LIST_HEAD)
     {
         /* It is not, so set the backlink of the actual entry, to our backlink */
-        MiGetPfnEntry(OldFlink)->u2.Blink = OldBlink;
+        MI_PFN_ELEMENT(OldFlink)->u2.Blink = OldBlink;
     }
     else
     {
@@ -125,7 +125,7 @@
     if (OldBlink != LIST_HEAD)
     {
         /* It is not, so set the backlink of the actual entry, to our backlink */
-        MiGetPfnEntry(OldBlink)->u1.Flink = OldFlink;
+        MI_PFN_ELEMENT(OldBlink)->u1.Flink = OldFlink;
     }
     else
     {
@@ -149,7 +149,7 @@
         if (ColorTable->Flink != LIST_HEAD)
         {
             /* And make the previous link point to the head now */
-            MiGetPfnEntry(ColorTable->Flink)->u4.PteFrame = COLORED_LIST_HEAD;
+            MI_PFN_ELEMENT(ColorTable->Flink)->u4.PteFrame = COLORED_LIST_HEAD;
         }
         else
         {
@@ -163,14 +163,14 @@
         ASSERT(Entry->u4.PteFrame != COLORED_LIST_HEAD);
 
         /* Make the back link point to whoever the next page is */
-        Pfn1 = MiGetPfnEntry(Entry->u4.PteFrame);
+        Pfn1 = MI_PFN_ELEMENT(Entry->u4.PteFrame);
         Pfn1->OriginalPte.u.Long = Entry->OriginalPte.u.Long;
 
         /* Check if this page was pointing to the head */
         if (Entry->OriginalPte.u.Long != LIST_HEAD)
         {
             /* Make the back link point to the head */
-            Pfn1 = MiGetPfnEntry(Entry->OriginalPte.u.Long);
+            Pfn1 = MI_PFN_ELEMENT(Entry->OriginalPte.u.Long);
             Pfn1->u4.PteFrame = Entry->u4.PteFrame;
         }
         else
@@ -235,7 +235,7 @@
     ASSERT(Color < MmSecondaryColors);
 
     /* Get the PFN entry */
-    Pfn1 = MiGetPfnEntry(PageIndex);
+    Pfn1 = MI_PFN_ELEMENT(PageIndex);
     ASSERT(Pfn1->u3.e1.RemovalRequested == 0);
     ASSERT(Pfn1->u3.e1.Rom == 0);
     
@@ -260,7 +260,7 @@
     if (OldFlink != LIST_HEAD)
     {
         /* It is not, so set the backlink of the actual entry, to our backlink */
-        MiGetPfnEntry(OldFlink)->u2.Blink = OldBlink;
+        MI_PFN_ELEMENT(OldFlink)->u2.Blink = OldBlink;
     }
     else
     {
@@ -272,7 +272,7 @@
     if (OldBlink != LIST_HEAD)
     {
         /* It is not, so set the backlink of the actual entry, to our backlink */
-        MiGetPfnEntry(OldBlink)->u1.Flink = OldFlink;
+        MI_PFN_ELEMENT(OldBlink)->u1.Flink = OldFlink;
     }
     else
     {
@@ -306,7 +306,7 @@
     else
     {
         /* The list is empty, so we are the first page */
-        MiGetPfnEntry(ColorTable->Flink)->u4.PteFrame = COLORED_LIST_HEAD;
+        MI_PFN_ELEMENT(ColorTable->Flink)->u4.PteFrame = COLORED_LIST_HEAD;
     }
     
     /* One less page */
@@ -393,7 +393,7 @@
     PageIndex = MiRemovePageByColor(PageIndex, Color);
 
     /* Sanity checks */
-    Pfn1 = MiGetPfnEntry(PageIndex);
+    Pfn1 = MI_PFN_ELEMENT(PageIndex);
     ASSERT((Pfn1->u3.e1.PageLocation == FreePageList) ||
            (Pfn1->u3.e1.PageLocation == ZeroedPageList));
     ASSERT(Pfn1->u3.e2.ReferenceCount == 0);
@@ -458,13 +458,13 @@
 #endif
 
     /* Sanity checks */
-    Pfn1 = MiGetPfnEntry(PageIndex);
+    Pfn1 = MI_PFN_ELEMENT(PageIndex);
     ASSERT((Pfn1->u3.e1.PageLocation == FreePageList) ||
            (Pfn1->u3.e1.PageLocation == ZeroedPageList));
 
     /* Remove the page from its list */
     PageIndex = MiRemovePageByColor(PageIndex, Color);
-    ASSERT(Pfn1 == MiGetPfnEntry(PageIndex));
+    ASSERT(Pfn1 == MI_PFN_ELEMENT(PageIndex));
     
     /* Zero it, if needed */
     if (Zero) MiZeroPhysicalPage(PageIndex);
@@ -497,7 +497,7 @@
            (PageFrameIndex >= MmLowestPhysicalPage));
 
     /* Get the PFN entry */
-    Pfn1 = MiGetPfnEntry(PageFrameIndex);
+    Pfn1 = MI_PFN_ELEMENT(PageFrameIndex);
 
     /* Sanity checks that a right kind of page is being inserted here */
     ASSERT(Pfn1->u4.MustBeCached == 0);
@@ -516,7 +516,7 @@
     if (LastPage != LIST_HEAD)
     {
         /* Link us with the previous page, so we're at the end now */
-        MiGetPfnEntry(LastPage)->u1.Flink = PageFrameIndex;
+        MI_PFN_ELEMENT(LastPage)->u1.Flink = PageFrameIndex;
     }
     else
     {
@@ -571,19 +571,15 @@
         /* Get the previous page */
         Blink = (PMMPFN)ColorTable->Blink;
         
-        /* Make it link to us */
+        /* Make it link to us, and link back to it */
+        Blink->OriginalPte.u.Long = PageFrameIndex;
         Pfn1->u4.PteFrame = MiGetPfnEntryIndex(Blink);
-         
-        /* If there is an original pte, it should be an old link, NOT a ReactOS RMAP */
-        ASSERT(Blink->u4.AweAllocation == FALSE);
-        Blink->OriginalPte.u.Long = PageFrameIndex;
     }
     
     /* Now initialize our own list pointers */
     ColorTable->Blink = Pfn1;
 
-    /* If there is an original pte, it should be an old link, NOT a ReactOS RMAP */
-    ASSERT(Pfn1->u4.AweAllocation == FALSE);
+    /* This page is now the last */
     Pfn1->OriginalPte.u.Long = LIST_HEAD;
     
     /* And increase the count in the colored list */
@@ -627,7 +623,7 @@
            (PageFrameIndex >= MmLowestPhysicalPage));
  
     /* Page should be unused */
-    Pfn1 = MiGetPfnEntry(PageFrameIndex);
+    Pfn1 = MI_PFN_ELEMENT(PageFrameIndex);
     ASSERT(Pfn1->u3.e2.ReferenceCount == 0);
     ASSERT(Pfn1->u3.e1.Rom != 1);
 
@@ -651,7 +647,7 @@
     if (Flink != LIST_HEAD)
     {
         /* It wasn't, so update the backlink of the previous head page */
-        Pfn2 = MiGetPfnEntry(Flink);
+        Pfn2 = MI_PFN_ELEMENT(Flink);
         Pfn2->u2.Blink = PageFrameIndex;
     }
     else
@@ -691,9 +687,6 @@
     /* Get the old head */
     Flink = ColorHead->Flink;
 
-    /* If there is an original pte, it should be an old link, NOT a ReactOS RMAP */
-    ASSERT(Pfn1->u4.AweAllocation == FALSE);
-    
     /* Make this page point back to the list, and point forwards to the old head */
     Pfn1->OriginalPte.u.Long = Flink;
     Pfn1->u4.PteFrame = COLORED_LIST_HEAD;
@@ -705,7 +698,7 @@
     if (Flink != LIST_HEAD)
     {
         /* No, so make the old head point to this page */
-        Pfn2 = MiGetPfnEntry(Flink);
+        Pfn2 = MI_PFN_ELEMENT(Flink);
         Pfn2->u4.PteFrame = PageFrameIndex;
     }
     else
@@ -737,7 +730,7 @@
     ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
 
     /* Setup the PTE */
-    Pfn1 = MiGetPfnEntry(PageFrameIndex);
+    Pfn1 = MI_PFN_ELEMENT(PageFrameIndex);
     Pfn1->PteAddress = PointerPte;
 
     /* Check if this PFN is part of a valid address space */
@@ -788,7 +781,7 @@
     Pfn1->u4.PteFrame = PageFrameIndex;
 
     /* Increase its share count so we don't get rid of it */
-    Pfn1 = MiGetPfnEntry(PageFrameIndex);
+    Pfn1 = MI_PFN_ELEMENT(PageFrameIndex);
     Pfn1->u2.ShareCount++;
 }
 
@@ -842,8 +835,8 @@
                       IN PFN_NUMBER PageFrameIndex)
 {
     ASSERT(PageFrameIndex > 0);
-    ASSERT(MiGetPfnEntry(PageFrameIndex) != NULL);
-    ASSERT(Pfn1 == MiGetPfnEntry(PageFrameIndex));
+    ASSERT(MI_PFN_ELEMENT(PageFrameIndex) != NULL);
+    ASSERT(Pfn1 == MI_PFN_ELEMENT(PageFrameIndex));
     ASSERT(MI_IS_ROS_PFN(Pfn1) == FALSE);
 
     /* Page must be in-use */
@@ -880,13 +873,7 @@
 
             /* Clear the last reference */
             Pfn1->u3.e2.ReferenceCount = 0;
-
-            /*
-             * OriginalPte is used by AweReferenceCount in ReactOS, but either 
-             * ways we shouldn't be seeing RMAP entries at this point
-             */
             ASSERT(Pfn1->OriginalPte.u.Soft.Prototype == 0);
-            ASSERT(Pfn1->u4.AweAllocation == FALSE);
 
             /* Mark the page temporarily as valid, we're going to make it free soon */
             Pfn1->u3.e1.PageLocation = ActiveAndValid;
@@ -912,7 +899,7 @@
 
     /* Sanity checks on the page */
     ASSERT(PageFrameIndex < MmHighestPhysicalPage);
-    ASSERT(Pfn1 == MiGetPfnEntry(PageFrameIndex));
+    ASSERT(Pfn1 == MI_PFN_ELEMENT(PageFrameIndex));
     ASSERT(Pfn1->u3.e2.ReferenceCount != 0);
 
     /* Dereference the page, bail out if it's still alive */
@@ -954,7 +941,7 @@
     PMMPFN Pfn1;
     
     /* Setup the PTE */
-    Pfn1 = MiGetPfnEntry(PageFrameIndex);
+    Pfn1 = MI_PFN_ELEMENT(PageFrameIndex);
     Pfn1->PteAddress = PointerPte;
 
     /* Make this a software PTE */
@@ -975,7 +962,7 @@
         Pfn1->u4.PteFrame = PteFrame;
         
         /* Increase its share count so we don't get rid of it */    
-        Pfn1 = MiGetPfnEntry(PteFrame);
+        Pfn1 = MI_PFN_ELEMENT(PteFrame);
         Pfn1->u2.ShareCount++;
     }
 }




More information about the Ros-diffs mailing list