Author: jgardou
Date: Tue Nov 15 18:36:26 2011
New Revision: 54386
URL:
http://svn.reactos.org/svn/reactos?rev=54386&view=rev
Log:
[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 ;-)
Modified:
trunk/reactos/ntoskrnl/mm/anonmem.c
trunk/reactos/ntoskrnl/mm/freelist.c
trunk/reactos/ntoskrnl/mm/marea.c
trunk/reactos/ntoskrnl/mm/pagefile.c
Modified: trunk/reactos/ntoskrnl/mm/anonmem.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/anonmem.c?rev=…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/anonmem.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/anonmem.c [iso-8859-1] Tue Nov 15 18:36:26 2011
@@ -183,7 +183,7 @@
* 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 @@
/*
* Handle swapped out pages.
*/
- if (MmIsPageSwapEntry(NULL, Address))
+ if (MmIsPageSwapEntry(Process, Address))
{
SWAPENTRY SwapEntry;
@@ -327,7 +327,7 @@
{
MmUnlockAddressSpace(AddressSpace);
Status = MmCreateVirtualMapping(Process,
- Address,
+ (PVOID)PAGE_ROUND_DOWN(Address),
Region->Protect,
&Page,
1);
Modified: trunk/reactos/ntoskrnl/mm/freelist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/freelist.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/freelist.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/freelist.c [iso-8859-1] Tue Nov 15 18:36:26 2011
@@ -92,6 +92,7 @@
/* 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 @@
/* 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);
}
Modified: trunk/reactos/ntoskrnl/mm/marea.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/marea.c?rev=54…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/marea.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/marea.c [iso-8859-1] Tue Nov 15 18:36:26 2011
@@ -893,7 +893,7 @@
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 @@
{
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 @@
{
ULONG i;
NTSTATUS Status;
+
+ ASSERT(((ULONG_PTR)BaseAddress % PAGE_SIZE) == 0);
for (i = 0; i < PAGE_ROUND_UP(Length) / PAGE_SIZE; i++)
{
Modified: trunk/reactos/ntoskrnl/mm/pagefile.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/pagefile.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/pagefile.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/pagefile.c [iso-8859-1] Tue Nov 15 18:36:26 2011
@@ -113,7 +113,7 @@
*/
#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;