15 #define MODULE_INVOLVED_IN_ARM3 19 #define ASSERT_LIST_INVARIANT(x) \ 21 ASSERT(((x)->Total == 0 && \ 22 (x)->Flink == LIST_HEAD && \ 23 (x)->Blink == LIST_HEAD) || \ 25 (x)->Flink != LIST_HEAD && \ 26 (x)->Blink != LIST_HEAD)); \ 29 #define ASSERT_LIST_INVARIANT(x) 165 OldFlink =
Entry->u1.Flink;
166 OldBlink =
Entry->u2.Blink;
177 ListHead->
Blink = OldBlink;
189 ListHead->
Flink = OldFlink;
200 OldFlink = ColorTable->
Flink;
201 if (OldFlink == OldBlink)
204 ColorTable->
Flink =
Entry->OriginalPte.u.Long;
235 ColorTable->
Blink = Pfn1;
244 Entry->OriginalPte.u.Long = 0;
273 ASSERT(Pfn->u3.e2.ReferenceCount == 0);
283 ASSERT(Pfn->u3.e1.Rom == 0);
292 ASSERT(Pfn->u3.e1.PrototypePte == 1);
298 ASSERT(Pfn->OriginalPte.u.Soft.Prototype == 0);
317 ASSERT(Pfn->u3.e1.WriteInProgress == 0);
318 ASSERT(Pfn->u3.e1.ReadInProgress == 0);
322 OldFlink = Pfn->u1.Flink;
323 OldBlink = Pfn->u2.Blink;
334 ListHead->
Blink = OldBlink;
346 ListHead->
Flink = OldFlink;
350 Pfn->OriginalPte.u.Long = 0;
353 Pfn->u1.Flink = Pfn->u2.Blink = 0;
370 USHORT OldColor, OldCache;
408 ListHead->
Blink = OldBlink;
420 ListHead->
Flink = OldFlink;
428 Pfn1->
u3.
e2.ShortFlags = 0;
615 ASSERT((PageFrameIndex != 0) &&
632 DPRINT1(
"Legacy Mm eating ARM3 page!.\n");
642 LastPage = ListHead->
Blink;
651 ListHead->
Flink = PageFrameIndex;
655 ListHead->
Blink = PageFrameIndex;
682 ColorTable->
Flink = PageFrameIndex;
695 ColorTable->
Blink = Pfn1;
704 if (ListHead->
Total >= 8)
725 DPRINT(
"Inserting page: %lx into standby list !\n", PageFrameIndex);
729 ASSERT((PageFrameIndex != 0) &&
749 Flink = ListHead->
Flink;
750 ListHead->
Flink = PageFrameIndex;
761 Pfn2->
u2.
Blink = PageFrameIndex;
766 ListHead->
Blink = PageFrameIndex;
794 ASSERT((PageFrameIndex) &&
804 ListName = ListHead->ListName;
821 ASSERT(ListHead->ListName == ListName);
831 DPRINT(
"Modified page being added: %lx\n", PageFrameIndex);
836 ASSERT (ListHead->ListName == ListName);
850 Flink = ListHead->Flink;
851 ListHead->Flink = PageFrameIndex;
862 Pfn2->
u2.
Blink = PageFrameIndex;
867 ListHead->Blink = PageFrameIndex;
873 LastPage = ListHead->Blink;
882 ListHead->Flink = PageFrameIndex;
886 ListHead->Blink = PageFrameIndex;
914 Flink = ColorHead->
Flink;
921 ColorHead->
Flink = PageFrameIndex;
983 if (PointerPte->u.Hard.Valid == 1)
1001 Pfn1->
u3.
e2.ReferenceCount = 1;
1026 ASSERT(PageFrameIndex != 0);
1046 ASSERT(PointerPte->u.Hard.Valid == 0);
1055 Pfn1->
u3.
e2.ReferenceCount++;
1080 ASSERT(PageFrameIndex != 0);
1108 if (PointerPde->u.Hard.Valid == 1)
1123 ContainingPageFrame);
1139 ASSERT(PageFrameIndex > 0);
1152 Pfn1->u3.e1.PageLocation,
1157 ASSERT(Pfn1->u3.e2.ReferenceCount != 0);
1160 ASSERT(Pfn1->u2.ShareCount < 0xF000000);
1161 if (!--Pfn1->u2.ShareCount)
1164 if (Pfn1->u3.e1.PrototypePte)
1167 PointerPte = Pfn1->PteAddress;
1175 PointerPte = Pfn1->PteAddress;
1177 TempPte.u.Soft.Transition = 1;
1180 TempPte.u.Soft.Protection = Pfn1->OriginalPte.u.Soft.Protection;
1191 if (Pfn1->u3.e2.ReferenceCount == 1)
1197 Pfn1->u3.e2.ReferenceCount = 0;
1198 ASSERT(Pfn1->OriginalPte.u.Soft.Prototype == 0);
1231 Pfn1->
u3.
e2.ReferenceCount == 0 ||
1232 Pfn1->u3.e2.ReferenceCount >= 2500)
1238 ASSERT(Pfn1->u3.e2.ReferenceCount != 0);
1239 ASSERT(Pfn1->u3.e2.ReferenceCount < 2500);
1244 if (Pfn1->u3.e2.ReferenceCount)
return;
1247 if (Pfn1->u2.ShareCount != 0)
1250 KeBugCheckEx(PFN_LIST_CORRUPT, 7, PageFrameIndex, Pfn1->u2.ShareCount, 0);
1265 if (Pfn1->u3.e1.Modified == 1)
1273 ASSERT(Pfn1->u3.e1.RemovalRequested == 0);
1295 Pfn1->
u3.
e2.ReferenceCount = 1;
#define MI_MAKE_SOFTWARE_PTE(p, x)
VOID FASTCALL MiInsertStandbyListAtFront(IN PFN_NUMBER PageFrameIndex)
VOID NTAPI MiInitializePfn(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN BOOLEAN Modified)
VOID NTAPI MiUnlinkPageFromList(IN PMMPFN Pfn)
PFN_NUMBER NTAPI MiRemoveZeroPage(IN ULONG Color)
VOID NTAPI MiInitializePfnAndMakePteValid(IN PFN_NUMBER PageFrameIndex, IN PMMPTE PointerPte, IN MMPTE TempPte)
NTSTATUS NTAPI MiInitializeAndChargePfn(OUT PPFN_NUMBER PageFrameIndex, IN PMMPDE PointerPde, IN PFN_NUMBER ContainingPageFrame, IN BOOLEAN SessionAllocation)
ULONG MI_PFN_CURRENT_USAGE
#define MI_ASSERT_PFN_LOCK_HELD()
PFN_NUMBER MmMinimumFreePages
MMPFNLIST MmBadPageListHead
MMPFNLIST MmStandbyPageListHead
ULONG MmTotalPagesForPagingFile
struct _MMPFN::@1778::@1784 e2
PFN_NUMBER NTAPI MiRemovePageByColor(IN PFN_NUMBER PageIndex, IN ULONG Color)
VOID NTAPI MiInsertPageInList(IN PMMPFNLIST ListHead, IN PFN_NUMBER PageFrameIndex)
PFN_NUMBER MmHighMemoryThreshold
#define ASSERT_LIST_INVARIANT(x)
#define MI_GET_NEXT_COLOR()
HARDWARE_PDE_ARMV6 TempPde
FORCEINLINE KIRQL MiAcquirePfnLock(VOID)
PFN_NUMBER MmLowestPhysicalPage
MMPFNLIST MmFreePageListHead
NTSTATUS FASTCALL MiCheckPdeForPagedPool(IN PVOID Address)
PFN_NUMBER MmAvailablePages
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
FORCEINLINE VOID MiReleasePfnLock(_In_ KIRQL OldIrql)
PMMPFNLIST MmPageLocationList[]
#define MiAddressToPte(x)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
FORCEINLINE VOID MI_WRITE_VALID_PTE(IN PMMPTE PointerPte, IN MMPTE TempPte)
ULONG MmTransitionSharedPages
VOID NTAPI MmRebalanceMemoryConsumers(VOID)
VOID NTAPI MiZeroPhysicalPage(IN PFN_NUMBER PageFrameIndex)
#define PsGetCurrentProcess
PVOID NTAPI MiMapPageInHyperSpace(IN PEPROCESS Process, IN PFN_NUMBER Page, IN PKIRQL OldIrql)
ULONG_PTR VerifierAllocation
MMPFNLIST MmRomPageListHead
PFN_NUMBER NTAPI MiRemoveAnyPage(IN ULONG Color)
KEVENT MmZeroingPageEvent
ULONG MmSecondaryColorMask
FORCEINLINE VOID MI_WRITE_VALID_PDE(IN PMMPDE PointerPde, IN MMPDE TempPde)
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
PMMCOLOR_TABLES MmFreePagesByColor[FreePageList+1]
MMPFNLIST MmModifiedPageListHead
MMPFNLIST MmModifiedNoWritePageListHead
static VOID MiDecrementAvailablePages(VOID)
VOID FASTCALL KeZeroPages(IN PVOID Address, IN ULONG Size)
#define NT_SUCCESS(StatCode)
#define MI_IS_PFN_DELETED(x)
VOID NTAPI MiUnlinkFreeOrZeroedPage(IN PMMPFN Entry)
BOOLEAN MmRosNotifyAvailablePage(PFN_NUMBER PageFrameIndex)
HARDWARE_PTE_ARMV6 TempPte
VOID NTAPI MiUnmapPageInHyperSpace(IN PEPROCESS Process, IN PVOID Address, IN KIRQL OldIrql)
FORCEINLINE PMMPFN MI_PFN_ELEMENT(IN PFN_NUMBER Pfn)
PFN_NUMBER MmLowMemoryThreshold
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
VOID NTAPI MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
#define memcpy(s1, s2, n)
MMPFNLIST MmModifiedPageListByColor[1]
static VOID MiIncrementAvailablePages(VOID)
LIST_HEAD(acpi_bus_event_list)
MMPTE ValidKernelPdeLocal
#define InterlockedDecrement16
FORCEINLINE VOID MI_WRITE_INVALID_PTE(IN PMMPTE PointerPte, IN MMPTE InvalidPte)
VOID NTAPI MiInitializePfnForOtherProcess(IN PFN_NUMBER PageFrameIndex, IN PVOID PteAddress, IN PFN_NUMBER PteFrame)
VOID NTAPI MiDecrementReferenceCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
MMPFNLIST MmZeroedPageListHead
IN PVCB IN VBO IN ULONG OUT PBCB OUT PVOID IN BOOLEAN IN BOOLEAN Zero
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
FORCEINLINE PFN_NUMBER MiGetPfnEntryIndex(IN PMMPFN Pfn1)
#define RtlZeroMemory(Destination, Length)
MMPFNLIST MmStandbyPageListByPriority[8]
PFN_NUMBER MmHighestPhysicalPage
FORCEINLINE PVOID MiPteToAddress(PMMPTE PointerPte)
VOID NTAPI KeClearEvent(IN PKEVENT Event)
PKEVENT MiHighMemoryEvent
VOID NTAPI MiDecrementShareCount(IN PMMPFN Pfn1, IN PFN_NUMBER PageFrameIndex)
base of all file and directory entries
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
CHAR MI_PFN_CURRENT_PROCESS_NAME[16]