Author: jgardou Date: Wed Feb 29 17:41:45 2012 New Revision: 55925
URL: http://svn.reactos.org/svn/reactos?rev=55925&view=rev Log: [NTOSKRNL/MM] - assert PDE ref count consistency everywhere - fix the fix(tm) : after reference decrement, the maximum must not be reached
Modified: trunk/reactos/ntoskrnl/mm/ARM3/virtual.c trunk/reactos/ntoskrnl/mm/anonmem.c trunk/reactos/ntoskrnl/mm/marea.c trunk/reactos/ntoskrnl/mm/section.c
Modified: trunk/reactos/ntoskrnl/mm/ARM3/virtual.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/virtual.c?... ============================================================================== --- trunk/reactos/ntoskrnl/mm/ARM3/virtual.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/ARM3/virtual.c [iso-8859-1] Wed Feb 29 17:41:45 2012 @@ -412,7 +412,7 @@ { DPRINT("Decrement used PTEs by address: %lx\n", Va); (*UsedPageTableEntries)--; - ASSERT((*UsedPageTableEntries) <= PTE_COUNT); + ASSERT((*UsedPageTableEntries) < PTE_COUNT); DPRINT("Refs: %lx\n", (*UsedPageTableEntries));
/* Check if the PTE is actually mapped in */
Modified: trunk/reactos/ntoskrnl/mm/anonmem.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/anonmem.c?rev=5... ============================================================================== --- trunk/reactos/ntoskrnl/mm/anonmem.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/anonmem.c [iso-8859-1] Wed Feb 29 17:41:45 2012 @@ -117,6 +117,7 @@ else if(Address < MmSystemRangeStart) { AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--; + ASSERT(AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT); } #endif MmUnlockAddressSpace(AddressSpace); @@ -416,6 +417,7 @@ if(Address < MmSystemRangeStart) { AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--; + ASSERT(AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT); } #endif } @@ -440,6 +442,7 @@ if(Address < MmSystemRangeStart) { AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--; + ASSERT(AddressSpace->VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT); } #endif }
Modified: trunk/reactos/ntoskrnl/mm/marea.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/marea.c?rev=559... ============================================================================== --- trunk/reactos/ntoskrnl/mm/marea.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/marea.c [iso-8859-1] Wed Feb 29 17:41:45 2012 @@ -758,7 +758,7 @@ { ASSERT(AddressSpace != MmGetKernelAddressSpace()); MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--; - ASSERT(MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT); + ASSERT(MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT); if(MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] == 0) { /* No PTE relies on this PDE. Release it */
Modified: trunk/reactos/ntoskrnl/mm/section.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/section.c?rev=5... ============================================================================== --- trunk/reactos/ntoskrnl/mm/section.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/section.c [iso-8859-1] Wed Feb 29 17:41:45 2012 @@ -1602,6 +1602,7 @@ if(Address < MmSystemRangeStart) { MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--; + ASSERT(MmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT); } #endif MmLockAddressSpace(AddressSpace); @@ -1978,7 +1979,7 @@ if((Address < MmSystemRangeStart) && (Process != PageOutContext->CallingProcess)) { Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--; - ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT); + ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT); } #endif
@@ -2158,7 +2159,7 @@ if(Address < MmSystemRangeStart) { Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--; - ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT); + ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT); } #endif MmSetSavedSwapEntryPage(Page, 0); @@ -2186,7 +2187,7 @@ if(Address < MmSystemRangeStart) { Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--; - ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT); + ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT); } #endif MmSetSavedSwapEntryPage(Page, 0); @@ -2247,7 +2248,7 @@ if(Address < MmSystemRangeStart) { Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--; - ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT); + ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT); } #endif MmReleasePageMemoryConsumer(MC_USER, Page); @@ -2413,7 +2414,7 @@ if(Address < MmSystemRangeStart) { Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)]--; - ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] <= PTE_COUNT); + ASSERT(Process->Vm.VmWorkingSetList->UsedPageTableEntries[MiGetPdeOffset(Address)] < PTE_COUNT); } #endif Entry = MAKE_SWAP_SSE(SwapEntry);