From fcf9dcd627961185a3eec0d231df94bc7c9d93b0 Mon Sep 17 00:00:00 2001 From: David Welch Date: Sun, 25 Jun 2000 17:41:01 +0000 Subject: [PATCH] Fixed bug. svn path=/trunk/; revision=1210 --- reactos/ntoskrnl/mm/freelist.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/reactos/ntoskrnl/mm/freelist.c b/reactos/ntoskrnl/mm/freelist.c index 7684a38643f..fe63b6d63e4 100644 --- a/reactos/ntoskrnl/mm/freelist.c +++ b/reactos/ntoskrnl/mm/freelist.c @@ -83,7 +83,12 @@ PVOID MmInitializePageList(PVOID FirstPhysKernelAddress, MmPageArray = (PHYSICAL_PAGE *)LastKernelAddress; DPRINT("Reserved %d\n", Reserved); - + + LastKernelAddress = PAGE_ROUND_UP(LastKernelAddress); + LastKernelAddress = ((ULONG)LastKernelAddress + (Reserved * PAGESIZE)); + LastPhysKernelAddress = (PVOID)PAGE_ROUND_UP(LastPhysKernelAddress); + LastPhysKernelAddress = LastPhysKernelAddress + (Reserved * PAGESIZE); + MiNrFreePages = 0; MiNrUsedPages = 0; @@ -103,8 +108,8 @@ PVOID MmInitializePageList(PVOID FirstPhysKernelAddress, &MmPageArray[i].ListEntry); } MiNrUsedPages = MiNrUsedPages + - (((0xa0000) / PAGESIZE) - i); - for (; i<(0xa0000 / PAGESIZE); i++) + ((((ULONG)LastPhysKernelAddress) / PAGESIZE) - i); + for (; i<((ULONG)LastKernelAddress / PAGESIZE); i++) { MmPageArray[i].Flags = PHYSICAL_PAGE_INUSE; MmPageArray[i].ReferenceCount = 1; @@ -114,6 +119,18 @@ PVOID MmInitializePageList(PVOID FirstPhysKernelAddress, InsertTailList(&UsedPageListHead, &MmPageArray[i].ListEntry); } + MiNrFreePages = MiNrFreePages + + ((0xa0000/PAGESIZE) - i); + for (; i<(0xa0000/PAGESIZE); i++) + { + MmPageArray[i].Flags = PHYSICAL_PAGE_FREE; + MmPageArray[i].ReferenceCount = 0; + KeInitializeEvent(&MmPageArray[i].Event, + NotificationEvent, + FALSE); + InsertTailList(&FreePageListHead, + &MmPageArray[i].ListEntry); + } for (; i<(0x100000 / PAGESIZE); i++) { MmPageArray[i].Flags = PHYSICAL_PAGE_BIOS; @@ -185,9 +202,7 @@ PVOID MmInitializePageList(PVOID FirstPhysKernelAddress, InsertTailList(&FreePageListHead, &MmPageArray[i].ListEntry); } - DPRINT("\nMmInitializePageList() = %x\n", - LastKernelAddress + Reserved * PAGESIZE); - return((PVOID)(LastKernelAddress + Reserved * PAGESIZE)); + return((PVOID)LastKernelAddress); } VOID MmReferencePage(PVOID PhysicalAddress)