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)
{