--- trunk/reactos/ntoskrnl/mm/i386/page.c 2005-01-05 19:26:51 UTC (rev 12833)
+++ trunk/reactos/ntoskrnl/mm/i386/page.c 2005-01-05 19:27:58 UTC (rev 12834)
@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id: page.c,v 1.80 2004/12/30 08:05:11 hyperion Exp $
+/* $Id$
*
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/mm/i386/page.c
@@ -106,7 +106,7 @@
VOID
MiFlushTlb(PULONG Pt, PVOID Address)
{
-#ifdef MP
+#ifdef CONFIG_SMP
if (Pt)
{
MmUnmapPageTable(Pt);
@@ -635,7 +635,7 @@
{
KEBUGCHECK(0);
}
- if (PageDir[PdeOffset] == 0)
+ if (0 == InterlockedCompareExchangeUL(&PageDir[PdeOffset], 0, 0))
{
if (Create == FALSE)
{
@@ -667,11 +667,11 @@
return Pt + ADDR_TO_PTE_OFFSET(Address);
}
PageDir = ADDR_TO_PDE(Address);
- if (*PageDir == 0)
+ if (0 == InterlockedCompareExchangeUL(PageDir, 0, 0))
{
if (Address >= (PVOID)KERNEL_BASE)
{
- if (MmGlobalKernelPageDirectory[PdeOffset] == 0)
+ if (0 == InterlockedCompareExchangeUL(&MmGlobalKernelPageDirectory[PdeOffset], 0, 0))
{
if (Create == FALSE)
{
@@ -692,7 +692,7 @@
MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn);
}
}
- *PageDir =MmGlobalKernelPageDirectory[PdeOffset];
+ InterlockedExchangeUL(PageDir, MmGlobalKernelPageDirectory[PdeOffset]);
}
else
{
@@ -907,7 +907,7 @@
/*
* Set the entry to zero
*/
- *Pt = 0;
+ InterlockedExchangeUL(Pt, 0);
MiFlushTlb(Pt, Address);
}
}
@@ -1596,7 +1596,7 @@
{
KEBUGCHECK(0);
}
- *Pt = PFN_TO_PTE(Pages[i]) | Attributes;
+ InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes);
}
}
@@ -1665,7 +1665,7 @@
{
MmMarkPageUnmapped(PTE_TO_PFN((Pte)));
}
- *Pt = SwapEntry << 1;
+ InterlockedExchangeUL(Pt, SwapEntry << 1);
if (Pte != 0)
{
MiFlushTlb(Pt, Address);
@@ -1866,7 +1866,7 @@
{
MmMarkPageUnmapped(PTE_TO_PFN((Pte)));
}
- *Pt = PFN_TO_PTE(Pages[i]) | Attributes;
+ InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes);
if (Address < (PVOID)KERNEL_BASE &&
Process->AddressSpace.PageTableRefCountTable != NULL &&
Attributes & PA_PRESENT)
@@ -2027,7 +2027,7 @@
{
KEBUGCHECK(0);
}
- *Pt = PAGE_MASK(*Pt) | Attributes | (*Pt & (PA_ACCESSED|PA_DIRTY));
+ InterlockedExchange(Pt, PAGE_MASK(*Pt) | Attributes | (*Pt & (PA_ACCESSED|PA_DIRTY)));
MiFlushTlb(Pt, Address);
}
}
@@ -2174,6 +2174,7 @@
if (Ke386GlobalPagesEnabled)
{
MmGlobalKernelPageDirectoryForPAE[i] |= PA_GLOBAL;
+ CurrentPageDirectory[i] |= PA_GLOBAL;
}
}
}
@@ -2190,6 +2191,7 @@
if (Ke386GlobalPagesEnabled)
{
MmGlobalKernelPageDirectory[i] |= PA_GLOBAL;
+ CurrentPageDirectory[i] |= PA_GLOBAL;
}
}
}