mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 23:33:01 +00:00
[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...
svn path=/trunk/; revision=47623
This commit is contained in:
parent
abefb827e7
commit
aa574a3c90
3 changed files with 6 additions and 8 deletions
|
@ -90,8 +90,8 @@ MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||||
// Also translate the cache attribute
|
// Also translate the cache attribute
|
||||||
//
|
//
|
||||||
Pfn = (PFN_NUMBER)(PhysicalAddress.QuadPart >> PAGE_SHIFT);
|
Pfn = (PFN_NUMBER)(PhysicalAddress.QuadPart >> PAGE_SHIFT);
|
||||||
IsIoMapping = (Pfn > MmHighestPhysicalPage) ? TRUE : FALSE;
|
Pfn1 = MiGetPfnEntry(Pfn);
|
||||||
if (!IsIoMapping) Pfn1 = MiGetPfnEntry(Pfn);
|
IsIoMapping = (Pfn1 == NULL) ? TRUE : FALSE;
|
||||||
CacheAttribute = MiPlatformCacheAttributes[IsIoMapping][CacheType];
|
CacheAttribute = MiPlatformCacheAttributes[IsIoMapping][CacheType];
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -219,7 +219,7 @@ MmUnmapIoSpace(IN PVOID BaseAddress,
|
||||||
//
|
//
|
||||||
// Is this an I/O mapping?
|
// Is this an I/O mapping?
|
||||||
//
|
//
|
||||||
if (Pfn > MmHighestPhysicalPage)
|
if (!MiGetPfnEntry(Pfn))
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Destroy the PTE
|
// Destroy the PTE
|
||||||
|
|
|
@ -129,7 +129,7 @@ MmBuildMdlForNonPagedPool(IN PMDL Mdl)
|
||||||
//
|
//
|
||||||
// Check if this is an I/O mapping
|
// Check if this is an I/O mapping
|
||||||
//
|
//
|
||||||
if (Pfn > MmHighestPhysicalPage) Mdl->MdlFlags |= MDL_IO_SPACE;
|
if (!MiGetPfnEntry(Pfn)) Mdl->MdlFlags |= MDL_IO_SPACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -85,10 +85,8 @@ MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress,
|
||||||
//
|
//
|
||||||
Pfn = (PFN_NUMBER)(PhysicalAddress >> PAGE_SHIFT);
|
Pfn = (PFN_NUMBER)(PhysicalAddress >> PAGE_SHIFT);
|
||||||
|
|
||||||
//
|
/* Check if this could be an I/O mapping */
|
||||||
// Check if this could be an I/O mapping
|
if (!MiGetPfnEntry(Pfn))
|
||||||
//
|
|
||||||
if (Pfn > MmHighestPhysicalPage)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// FIXME: We don't support this yet
|
// FIXME: We don't support this yet
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue