mirror of
https://github.com/reactos/reactos.git
synced 2024-06-28 17:01:28 +00:00
[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. svn path=/trunk/; revision=66334
This commit is contained in:
parent
873109862d
commit
51fd410d89
|
@ -1994,14 +1994,13 @@ MiIsEntireRangeCommitted(IN ULONG_PTR StartingAddress,
|
|||
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 @@ MiIsEntireRangeCommitted(IN ULONG_PTR StartingAddress,
|
|||
{
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue