From ac22af2d68823ec209344971aa433e1e084a987d Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Sat, 11 Jan 2003 15:26:59 +0000 Subject: [PATCH] Used lookasidelists for pageop's. svn path=/trunk/; revision=3971 --- reactos/ntoskrnl/include/internal/mm.h | 9 +++++---- reactos/ntoskrnl/mm/mminit.c | 3 ++- reactos/ntoskrnl/mm/pageop.c | 28 +++++++++++++++++++------- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index e5c576548b5..89566a1eb4f 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -410,7 +410,11 @@ MmReleasePageOp(PMM_PAGEOP PageOp); 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 @@ -523,9 +527,6 @@ VOID MmSetDirtyPage(PEPROCESS Process, PVOID Address); 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, diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index 3056c5111d2..3e6fd464566 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -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 * PROJECT: ReactOS kernel @@ -364,6 +364,7 @@ VOID MmInit3(VOID) MmInitPagerThread(); MmCreatePhysicalMemorySection(); MmInitializeRmapList(); + MmInitializePageOp(); /* * Initialise the modified page writer. diff --git a/reactos/ntoskrnl/mm/pageop.c b/reactos/ntoskrnl/mm/pageop.c index 0aece2c7f8d..88ee1ffc9a6 100644 --- a/reactos/ntoskrnl/mm/pageop.c +++ b/reactos/ntoskrnl/mm/pageop.c @@ -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 * PROJECT: ReactOS kernel @@ -22,8 +22,9 @@ #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') @@ -51,7 +52,7 @@ MmReleasePageOp(PMM_PAGEOP PageOp) { MmPageOpHashTable[PageOp->Hash] = PageOp->Next; KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql); - ExFreePool(PageOp); + ExFreeToNPagedLookasideList(&MmPageOpLookasideList, PageOp); return; } while (PrevPageOp->Next != NULL) @@ -60,7 +61,7 @@ MmReleasePageOp(PMM_PAGEOP PageOp) { PrevPageOp->Next = PageOp->Next; KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql); - ExFreePool(PageOp); + ExFreeToNPagedLookasideList(&MmPageOpLookasideList, PageOp); return; } PrevPageOp = PrevPageOp->Next; @@ -198,8 +199,7 @@ MmGetPageOp(PMEMORY_AREA MArea, ULONG Pid, PVOID Address, /* * Otherwise add a new pageop. */ - PageOp = ExAllocatePoolWithTag(NonPagedPool, sizeof(MM_PAGEOP), - TAG_MM_PAGEOP); + PageOp = ExAllocateFromNPagedLookasideList(&MmPageOpLookasideList); if (PageOp == NULL) { KeReleaseSpinLock(&MmPageOpHashTableLock, oldIrql); @@ -232,6 +232,20 @@ MmGetPageOp(PMEMORY_AREA MArea, ULONG Pid, PVOID Address, return(PageOp); } +VOID +MmInitializePageOp(VOID) +{ + memset(MmPageOpHashTable, 0, sizeof(MmPageOpHashTable)); + KeInitializeSpinLock(&MmPageOpHashTableLock); + + ExInitializeNPagedLookasideList (&MmPageOpLookasideList, + NULL, + NULL, + 0, + sizeof(MM_PAGEOP), + TAG_MM_PAGEOP, + 50); +}