If we delete a page table, we have also to clear the entry in the page directory area explicitly. This may fix parts of bug #710.
Modified: trunk/reactos/ntoskrnl/mm/i386/page.c

Modified: trunk/reactos/ntoskrnl/mm/i386/page.c
--- trunk/reactos/ntoskrnl/mm/i386/page.c	2005-08-16 15:47:38 UTC (rev 17413)
+++ trunk/reactos/ntoskrnl/mm/i386/page.c	2005-08-16 16:17:47 UTC (rev 17414)
@@ -411,17 +411,18 @@
    {
       ULONGLONG ZeroPde = 0LL;
       ExfpInterlockedExchange64UL(PAE_ADDR_TO_PDE(Address), &ZeroPde);
+      MiFlushTlb((PULONG)PAE_ADDR_TO_PDE(Address), PAE_ADDR_TO_PTE(Address));
    }
    else
    {
       *(ADDR_TO_PDE(Address)) = 0;
+      MiFlushTlb(ADDR_TO_PDE(Address), ADDR_TO_PTE(Address));
    }
    if (Address >= MmSystemRangeStart)
    {
       KEBUGCHECK(0);
       //       MmGlobalKernelPageDirectory[ADDR_TO_PDE_OFFSET(Address)] = 0;
    }
-   MiFlushTlb(NULL, Address);
    if (Process != NULL && Process != CurrentProcess)
    {
       KeDetachProcess();
@@ -455,6 +456,7 @@
       }
       Pfn = PAE_PTE_TO_PFN(*(PAE_ADDR_TO_PDE(Address)));
       ExfpInterlockedExchange64UL(PAE_ADDR_TO_PDE(Address), &ZeroPte);
+      MiFlushTlb((PULONG)PAE_ADDR_TO_PDE(Address), PAE_ADDR_TO_PTE(Address));
    }
    else
    {
@@ -471,8 +473,8 @@
       }
       Pfn = PTE_TO_PFN(*(ADDR_TO_PDE(Address)));
       *(ADDR_TO_PDE(Address)) = 0;
+      MiFlushTlb(ADDR_TO_PDE(Address), ADDR_TO_PTE(Address));
    }
-   MiFlushTlb(NULL, Address);
 
    if (Address >= MmSystemRangeStart)
    {