[NTOSKRNL/MM]

- call mm functions with a process, when we have one.
- Fix potential rounding issues
- Add some sanity ASSERTs
- You never use enough brackets ;-)

svn path=/trunk/; revision=54386
This commit is contained in:
Jérôme Gardou
2011-11-15 18:36:26 +00:00
parent a61f0b9cff
commit 9cc9f6687b
4 changed files with 10 additions and 5 deletions
+3 -3
View File
@@ -183,7 +183,7 @@ MmNotPresentFaultVirtualMemory(PMMSUPPORT AddressSpace,
* address space when another thread could load the page so we check
* that.
*/
if (MmIsPagePresent(NULL, Address))
if (MmIsPagePresent(Process, Address))
{
return(STATUS_SUCCESS);
}
@@ -301,7 +301,7 @@ MmNotPresentFaultVirtualMemory(PMMSUPPORT AddressSpace,
/*
* Handle swapped out pages.
*/
if (MmIsPageSwapEntry(NULL, Address))
if (MmIsPageSwapEntry(Process, Address))
{
SWAPENTRY SwapEntry;
@@ -327,7 +327,7 @@ MmNotPresentFaultVirtualMemory(PMMSUPPORT AddressSpace,
{
MmUnlockAddressSpace(AddressSpace);
Status = MmCreateVirtualMapping(Process,
Address,
(PVOID)PAGE_ROUND_DOWN(Address),
Region->Protect,
&Page,
1);
+2
View File
@@ -92,6 +92,7 @@ MmInsertLRULastUserPage(PFN_NUMBER Pfn)
/* Set the page as a user page */
ASSERT(Pfn != 0);
ASSERT_IS_ROS_PFN(MiGetPfnEntry(Pfn));
ASSERT(!RtlCheckBit(&MiUserPfnBitMap, (ULONG)Pfn));
OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
RtlSetBit(&MiUserPfnBitMap, (ULONG)Pfn);
KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
@@ -123,6 +124,7 @@ MmRemoveLRUUserPage(PFN_NUMBER Page)
/* Unset the page as a user page */
ASSERT(Page != 0);
ASSERT_IS_ROS_PFN(MiGetPfnEntry(Page));
ASSERT(RtlCheckBit(&MiUserPfnBitMap, (ULONG)Page));
RtlClearBit(&MiUserPfnBitMap, (ULONG)Page);
}
+4 -1
View File
@@ -893,7 +893,7 @@ MmCreateMemoryArea(PMMSUPPORT AddressSpace,
Granularity = (MEMORY_AREA_VIRTUAL_MEMORY == Type ? MM_VIRTMEM_GRANULARITY : PAGE_SIZE);
if ((*BaseAddress) == 0 && !FixedAddress)
{
tmpLength = PAGE_ROUND_UP(Length);
tmpLength = (ULONG_PTR)MM_ROUND_UP(Length, Granularity);
*BaseAddress = MmFindGap(AddressSpace,
tmpLength,
Granularity,
@@ -908,6 +908,7 @@ MmCreateMemoryArea(PMMSUPPORT AddressSpace,
{
tmpLength = Length + ((ULONG_PTR) *BaseAddress
- (ULONG_PTR) MM_ROUND_DOWN(*BaseAddress, Granularity));
tmpLength = (ULONG_PTR)MM_ROUND_UP(tmpLength, Granularity);
*BaseAddress = MM_ROUND_DOWN(*BaseAddress, Granularity);
if (!MmGetAddressSpaceOwner(AddressSpace) && *BaseAddress < MmSystemRangeStart)
@@ -986,6 +987,8 @@ MmMapMemoryArea(PVOID BaseAddress,
{
ULONG i;
NTSTATUS Status;
ASSERT(((ULONG_PTR)BaseAddress % PAGE_SIZE) == 0);
for (i = 0; i < PAGE_ROUND_UP(Length) / PAGE_SIZE; i++)
{
+1 -1
View File
@@ -113,7 +113,7 @@ static PFN_COUNT MiReservedSwapPages;
*/
#define FILE_FROM_ENTRY(i) ((i) & 0x0f)
#define OFFSET_FROM_ENTRY(i) ((i) >> 11)
#define ENTRY_FROM_FILE_OFFSET(i, j) ((i) | (j) << 11 | 0x400)
#define ENTRY_FROM_FILE_OFFSET(i, j) ((i) | ((j) << 11) | 0x400)
static BOOLEAN MmSwapSpaceMessage = FALSE;