X-Git-Url: http://git.jankratochvil.net/?a=blobdiff_plain;f=ntoskrnl%2Fmm%2Fpageop.c;h=7c4b15e3c71f3e36235022a6fead941c4e768729;hb=e3ed2d773259cc445c7ff8181ebd934931365328;hp=6c7a46f4b3b46c7e9bb90d00b08500cb36d4ba87;hpb=d378c68f5a9bb25c9e671dacd482d2e25d211df3;p=reactos.git diff --git a/ntoskrnl/mm/pageop.c b/ntoskrnl/mm/pageop.c index 6c7a46f..7c4b15e 100644 --- a/ntoskrnl/mm/pageop.c +++ b/ntoskrnl/mm/pageop.c @@ -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); +}