Author: jgardou Date: Tue Feb 17 14:19:05 2015 New Revision: 66334
URL: http://svn.reactos.org/svn/reactos?rev=66334&view=rev Log: [NTOSKRNL/MM] - MiIsEntireRangeCommitted: Ensure the PTE we are checking is really faulted in. - Prefer MiPteToPde and MiPdeToPte (which should really be called MiFirstPteInPde) instead of MiAddressToPte and MiPteToAddress Fixes weird failed ASSERT in page fault handler when using DPH.
Modified: trunk/reactos/ntoskrnl/mm/ARM3/virtual.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] Tue Feb 17 14:19:05 2015 @@ -1994,14 +1994,13 @@ if (OnBoundary) { /* Is this PDE demand zero? */ - PointerPde = MiAddressToPte(PointerPte); + PointerPde = MiPteToPde(PointerPte); if (PointerPde->u.Long != 0) { /* It isn't -- is it valid? */ if (PointerPde->u.Hard.Valid == 0) { /* Nope, fault it in */ - PointerPte = MiPteToAddress(PointerPde); MiMakeSystemAddressValid(PointerPte, Process); } } @@ -2009,13 +2008,13 @@ { /* The PTE was already valid, so move to the next one */ PointerPde++; - PointerPte = MiPteToAddress(PointerPde); + PointerPte = MiPdeToPte(PointerPde);
/* Is the entire VAD committed? If not, fail */ if (!Vad->u.VadFlags.MemCommit) return FALSE;
- /* Everything is committed so far past the range, return true */ - if (PointerPte > LastPte) return TRUE; + /* New loop iteration with our new, on-boundary PTE. */ + continue; } }