- 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
* address space when another thread could load the page so we check
* that.
*/
- if (MmIsPagePresent(NULL, Address))
+ if (MmIsPagePresent(Process, Address))
{
return(STATUS_SUCCESS);
}
/*
* Handle swapped out pages.
*/
- if (MmIsPageSwapEntry(NULL, Address))
+ if (MmIsPageSwapEntry(Process, Address))
{
SWAPENTRY SwapEntry;
{
MmUnlockAddressSpace(AddressSpace);
Status = MmCreateVirtualMapping(Process,
- Address,
+ (PVOID)PAGE_ROUND_DOWN(Address),
Region->Protect,
&Page,
1);
/* 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);
/* 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);
}
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,
{
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)
{
ULONG i;
NTSTATUS Status;
+
+ ASSERT(((ULONG_PTR)BaseAddress % PAGE_SIZE) == 0);
for (i = 0; i < PAGE_ROUND_UP(Length) / PAGE_SIZE; i++)
{
*/
#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;