Used lookasidelists for pageop's.

svn path=/trunk/; revision=3971
This commit is contained in:
Hartmut Birr 2003-01-11 15:26:59 +00:00
parent e177cc849d
commit ac22af2d68
3 changed files with 28 additions and 12 deletions

View file

@ -410,7 +410,11 @@ MmReleasePageOp(PMM_PAGEOP PageOp);
PMM_PAGEOP PMM_PAGEOP
MmGetPageOp(PMEMORY_AREA MArea, ULONG Pid, PVOID Address, MmGetPageOp(PMEMORY_AREA MArea, ULONG Pid, PVOID Address,
PMM_SECTION_SEGMENT Segment, ULONG Offset, ULONG OpType); 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 VOID
MiDebugDumpNonPagedPool(BOOLEAN NewOnly); MiDebugDumpNonPagedPool(BOOLEAN NewOnly);
VOID VOID
@ -523,9 +527,6 @@ VOID MmSetDirtyPage(PEPROCESS Process, PVOID Address);
VOID VOID
MmInitializeMdlImplementation(VOID); MmInitializeMdlImplementation(VOID);
extern PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress; extern PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress;
PMM_PAGEOP
MmCheckForPageOp(PMEMORY_AREA MArea, ULONG Pid, PVOID Address,
PMM_SECTION_SEGMENT Segment, ULONG Offset);
struct _KTRAP_FRAME; struct _KTRAP_FRAME;
NTSTATUS STDCALL NTSTATUS STDCALL
MmDumpToPagingFile(ULONG BugCode, MmDumpToPagingFile(ULONG BugCode,

View file

@ -1,4 +1,4 @@
/* $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 * COPYRIGHT: See COPYING in the top directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -364,6 +364,7 @@ VOID MmInit3(VOID)
MmInitPagerThread(); MmInitPagerThread();
MmCreatePhysicalMemorySection(); MmCreatePhysicalMemorySection();
MmInitializeRmapList(); MmInitializeRmapList();
MmInitializePageOp();
/* /*
* Initialise the modified page writer. * Initialise the modified page writer.

View file

@ -1,4 +1,4 @@
/* $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 * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -22,8 +22,9 @@
#define PAGEOP_HASH_TABLE_SIZE (32) #define PAGEOP_HASH_TABLE_SIZE (32)
KSPIN_LOCK MmPageOpHashTableLock; static KSPIN_LOCK MmPageOpHashTableLock;
PMM_PAGEOP MmPageOpHashTable[PAGEOP_HASH_TABLE_SIZE] = {NULL, } ; static PMM_PAGEOP MmPageOpHashTable[PAGEOP_HASH_TABLE_SIZE];
static NPAGED_LOOKASIDE_LIST MmPageOpLookasideList;
#define TAG_MM_PAGEOP TAG('M', 'P', 'O', 'P') #define TAG_MM_PAGEOP TAG('M', 'P', 'O', 'P')
@ -51,7 +52,7 @@ MmReleasePageOp(PMM_PAGEOP PageOp)
{ {
MmPageOpHashTable[PageOp->Hash] = PageOp->Next; MmPageOpHashTable[PageOp->Hash] = PageOp->Next;
KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql); KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql);
ExFreePool(PageOp); ExFreeToNPagedLookasideList(&MmPageOpLookasideList, PageOp);
return; return;
} }
while (PrevPageOp->Next != NULL) while (PrevPageOp->Next != NULL)
@ -60,7 +61,7 @@ MmReleasePageOp(PMM_PAGEOP PageOp)
{ {
PrevPageOp->Next = PageOp->Next; PrevPageOp->Next = PageOp->Next;
KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql); KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql);
ExFreePool(PageOp); ExFreeToNPagedLookasideList(&MmPageOpLookasideList, PageOp);
return; return;
} }
PrevPageOp = PrevPageOp->Next; PrevPageOp = PrevPageOp->Next;
@ -198,8 +199,7 @@ MmGetPageOp(PMEMORY_AREA MArea, ULONG Pid, PVOID Address,
/* /*
* Otherwise add a new pageop. * Otherwise add a new pageop.
*/ */
PageOp = ExAllocatePoolWithTag(NonPagedPool, sizeof(MM_PAGEOP), PageOp = ExAllocateFromNPagedLookasideList(&MmPageOpLookasideList);
TAG_MM_PAGEOP);
if (PageOp == NULL) if (PageOp == NULL)
{ {
KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql); KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql);
@ -232,6 +232,20 @@ MmGetPageOp(PMEMORY_AREA MArea, ULONG Pid, PVOID Address,
return(PageOp); return(PageOp);
} }
VOID
MmInitializePageOp(VOID)
{
memset(MmPageOpHashTable, 0, sizeof(MmPageOpHashTable));
KeInitializeSpinLock(&MmPageOpHashTableLock);
ExInitializeNPagedLookasideList (&MmPageOpLookasideList,
NULL,
NULL,
0,
sizeof(MM_PAGEOP),
TAG_MM_PAGEOP,
50);
}