From a89924e2bd01ff8aabaa9ba89b394f658095b8c1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 22 Jan 2011 09:43:52 +0000 Subject: [PATCH] [NTOSKRNL] MiAddressToPte translates a virtual address to the corresponding PTE, MiAddressToPde to the corresponding PDE. MiPteToAddress is the inverse of MiAddressToPte and translates from a PTE to the virtual address. MiPdeToAddress broke this scheme and didn't calculate the corresponding virtual adress, but the adress of the page table. Fix this inconsistency by renaming the macro to MiPdeToPte and adding a fixed MiPdeToAddress. All references fixed accordingly. svn path=/trunk/; revision=50458 --- reactos/ntoskrnl/include/internal/i386/mm.h | 10 ++++++---- reactos/ntoskrnl/mm/ARM3/pool.c | 2 +- reactos/ntoskrnl/mm/ARM3/virtual.c | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/i386/mm.h b/reactos/ntoskrnl/include/internal/i386/mm.h index 0ff6b5667c0..c9b41cada00 100644 --- a/reactos/ntoskrnl/include/internal/i386/mm.h +++ b/reactos/ntoskrnl/include/internal/i386/mm.h @@ -39,11 +39,13 @@ PULONG MmGetPageDirectory(VOID); // Convert a PTE into a corresponding address // #define MiPteToAddress(PTE) ((PVOID)((ULONG)(PTE) << 10)) -#define MiPdeToAddress(PDE) ((PVOID)((ULONG)(PDE) << 10)) +#define MiPdeToAddress(PDE) ((PVOID)((ULONG)(PDE) << 20)) +#define MiPdeToPte(PDE) ((PMMPTE)MiPteToAddress(PDE)) +#define MiPteToPde(PTE) ((PMMPDE)MiAddressToPte(PTE)) -#define ADDR_TO_PAGE_TABLE(v) (((ULONG)(v)) / (1024 * PAGE_SIZE)) -#define ADDR_TO_PDE_OFFSET(v) ((((ULONG)(v)) / (1024 * PAGE_SIZE))) -#define ADDR_TO_PTE_OFFSET(v) ((((ULONG)(v)) % (1024 * PAGE_SIZE)) / PAGE_SIZE) +#define ADDR_TO_PAGE_TABLE(v) (((ULONG)(v)) / (1024 * PAGE_SIZE)) +#define ADDR_TO_PDE_OFFSET(v) (((ULONG)(v)) / (1024 * PAGE_SIZE)) +#define ADDR_TO_PTE_OFFSET(v) ((((ULONG)(v)) % (1024 * PAGE_SIZE)) / PAGE_SIZE) #define MiGetPdeOffset ADDR_TO_PDE_OFFSET diff --git a/reactos/ntoskrnl/mm/ARM3/pool.c b/reactos/ntoskrnl/mm/ARM3/pool.c index 76b84db1e40..116c6cb0a82 100644 --- a/reactos/ntoskrnl/mm/ARM3/pool.c +++ b/reactos/ntoskrnl/mm/ARM3/pool.c @@ -463,7 +463,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType, // Get the first PTE in expansion space // PointerPde = MmPagedPoolInfo.NextPdeForPagedPoolExpansion; - BaseVa = MiPdeToAddress(PointerPde); + BaseVa = MiPdeToPte(PointerPde); BaseVaStart = BaseVa; // diff --git a/reactos/ntoskrnl/mm/ARM3/virtual.c b/reactos/ntoskrnl/mm/ARM3/virtual.c index 8222af3fe8c..485ee21a5b0 100644 --- a/reactos/ntoskrnl/mm/ARM3/virtual.c +++ b/reactos/ntoskrnl/mm/ARM3/virtual.c @@ -1127,7 +1127,7 @@ MiQueryAddressState(IN PVOID Va, if (!PointerPde->u.Long) { /* No address in this range used yet, move to the next PDE range */ - *NextVa = MiPteToAddress(MiPdeToAddress(PointerPde + 1)); + *NextVa = MiPdeToAddress(PointerPde + 1); break; } @@ -1135,7 +1135,7 @@ MiQueryAddressState(IN PVOID Va, if (!PointerPde->u.Hard.Valid) { /* It isn't, go ahead and do the fault */ - LockChange = MiMakeSystemAddressValid(MiPdeToAddress(PointerPde), + LockChange = MiMakeSystemAddressValid(MiPdeToPte(PointerPde), TargetProcess); }