PMM_PAGEOP
MmGetPageOp(PMEMORY_AREA MArea, ULONG Pid, PVOID Address,
PMM_SECTION_SEGMENT Segment, ULONG Offset, ULONG OpType);
-
+PMM_PAGEOP
+MmCheckForPageOp(PMEMORY_AREA MArea, ULONG Pid, PVOID Address,
+ PMM_SECTION_SEGMENT Segment, ULONG Offset);
+VOID
+MmInitializePageOp(VOID);
VOID
MiDebugDumpNonPagedPool(BOOLEAN NewOnly);
VOID
VOID
MmInitializeMdlImplementation(VOID);
extern PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress;
-PMM_PAGEOP
-MmCheckForPageOp(PMEMORY_AREA MArea, ULONG Pid, PVOID Address,
- PMM_SECTION_SEGMENT Segment, ULONG Offset);
struct _KTRAP_FRAME;
NTSTATUS STDCALL
MmDumpToPagingFile(ULONG BugCode,
-/* $Id: mminit.c,v 1.42 2002/12/16 22:59:44 hbirr Exp $
+/* $Id: mminit.c,v 1.43 2003/01/11 15:26:59 hbirr Exp $
*
* COPYRIGHT: See COPYING in the top directory
* PROJECT: ReactOS kernel
MmInitPagerThread();
MmCreatePhysicalMemorySection();
MmInitializeRmapList();
+ MmInitializePageOp();
/*
* Initialise the modified page writer.
-/* $Id: pageop.c,v 1.14 2002/10/01 19:27:24 chorns Exp $
+/* $Id: pageop.c,v 1.15 2003/01/11 15:26:59 hbirr Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
#define PAGEOP_HASH_TABLE_SIZE (32)
-KSPIN_LOCK MmPageOpHashTableLock;
-PMM_PAGEOP MmPageOpHashTable[PAGEOP_HASH_TABLE_SIZE] = {NULL, } ;
+static KSPIN_LOCK MmPageOpHashTableLock;
+static PMM_PAGEOP MmPageOpHashTable[PAGEOP_HASH_TABLE_SIZE];
+static NPAGED_LOOKASIDE_LIST MmPageOpLookasideList;
#define TAG_MM_PAGEOP TAG('M', 'P', 'O', 'P')
{
MmPageOpHashTable[PageOp->Hash] = PageOp->Next;
KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql);
- ExFreePool(PageOp);
+ ExFreeToNPagedLookasideList(&MmPageOpLookasideList, PageOp);
return;
}
while (PrevPageOp->Next != NULL)
{
PrevPageOp->Next = PageOp->Next;
KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql);
- ExFreePool(PageOp);
+ ExFreeToNPagedLookasideList(&MmPageOpLookasideList, PageOp);
return;
}
PrevPageOp = PrevPageOp->Next;
/*
* Otherwise add a new pageop.
*/
- PageOp = ExAllocatePoolWithTag(NonPagedPool, sizeof(MM_PAGEOP),
- TAG_MM_PAGEOP);
+ PageOp = ExAllocateFromNPagedLookasideList(&MmPageOpLookasideList);
if (PageOp == NULL)
{
KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql);
return(PageOp);
}
+VOID
+MmInitializePageOp(VOID)
+{
+ memset(MmPageOpHashTable, 0, sizeof(MmPageOpHashTable));
+ KeInitializeSpinLock(&MmPageOpHashTableLock);
+
+ ExInitializeNPagedLookasideList (&MmPageOpLookasideList,
+ NULL,
+ NULL,
+ 0,
+ sizeof(MM_PAGEOP),
+ TAG_MM_PAGEOP,
+ 50);
+}