Author: sir_richard Date: Sun Jun 6 16:15:18 2010 New Revision: 47623
URL: http://svn.reactos.org/svn/reactos?rev=47623&view=rev Log: [NTOS]: A PFN entry is not necessarily physical only if it is higher than MmHighestPhysicalPage. It can also be physical if it lies in a memory hole within the min-max physical page range. We can detect this by using our PFN Bitmap. So replace all "Is this an I/O mapping?" checks with a check on whether or not the PFN Database entry is NULL (which will check for us both of these statements). This ought to be a macro...
Modified: trunk/reactos/ntoskrnl/mm/ARM3/iosup.c trunk/reactos/ntoskrnl/mm/ARM3/mdlsup.c trunk/reactos/ntoskrnl/mm/mmdbg.c
Modified: trunk/reactos/ntoskrnl/mm/ARM3/iosup.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/iosup.c?re... ============================================================================== --- trunk/reactos/ntoskrnl/mm/ARM3/iosup.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/ARM3/iosup.c [iso-8859-1] Sun Jun 6 16:15:18 2010 @@ -90,8 +90,8 @@ // Also translate the cache attribute // Pfn = (PFN_NUMBER)(PhysicalAddress.QuadPart >> PAGE_SHIFT); - IsIoMapping = (Pfn > MmHighestPhysicalPage) ? TRUE : FALSE; - if (!IsIoMapping) Pfn1 = MiGetPfnEntry(Pfn); + Pfn1 = MiGetPfnEntry(Pfn); + IsIoMapping = (Pfn1 == NULL) ? TRUE : FALSE; CacheAttribute = MiPlatformCacheAttributes[IsIoMapping][CacheType];
// @@ -219,7 +219,7 @@ // // Is this an I/O mapping? // - if (Pfn > MmHighestPhysicalPage) + if (!MiGetPfnEntry(Pfn)) { // // Destroy the PTE
Modified: trunk/reactos/ntoskrnl/mm/ARM3/mdlsup.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/mdlsup.c?r... ============================================================================== --- trunk/reactos/ntoskrnl/mm/ARM3/mdlsup.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/ARM3/mdlsup.c [iso-8859-1] Sun Jun 6 16:15:18 2010 @@ -129,7 +129,7 @@ // // Check if this is an I/O mapping // - if (Pfn > MmHighestPhysicalPage) Mdl->MdlFlags |= MDL_IO_SPACE; + if (!MiGetPfnEntry(Pfn)) Mdl->MdlFlags |= MDL_IO_SPACE; }
/*
Modified: trunk/reactos/ntoskrnl/mm/mmdbg.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/mmdbg.c?rev=476... ============================================================================== --- trunk/reactos/ntoskrnl/mm/mmdbg.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/mmdbg.c [iso-8859-1] Sun Jun 6 16:15:18 2010 @@ -85,10 +85,8 @@ // Pfn = (PFN_NUMBER)(PhysicalAddress >> PAGE_SHIFT);
- // - // Check if this could be an I/O mapping - // - if (Pfn > MmHighestPhysicalPage) + /* Check if this could be an I/O mapping */ + if (!MiGetPfnEntry(Pfn)) { // // FIXME: We don't support this yet