Author: ros-arm-bringup Date: Mon Jun 22 12:51:28 2009 New Revision: 41528
URL: http://svn.reactos.org/svn/reactos?rev=41528&view=rev Log: - Initialize nonpaged pool expansion system PTEs (MiInitializeSystemPtes): - Just supports expansion space for now, not system space. - Very basic initialization of the accounting structures required. - Sets up the first two system PTE clusters for the space (the first contains the linkage, the second contains the sizage). - Called from MiInitializeArmPool.
Added: trunk/reactos/ntoskrnl/mm/ARM3/syspte.c (with props) Modified: trunk/reactos/ntoskrnl/mm/ARM3/miarm.h trunk/reactos/ntoskrnl/mm/ARM3/pool.c trunk/reactos/ntoskrnl/ntoskrnl-generic.rbuild
Modified: trunk/reactos/ntoskrnl/mm/ARM3/miarm.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/miarm.h?re... ============================================================================== --- trunk/reactos/ntoskrnl/mm/ARM3/miarm.h [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/ARM3/miarm.h [iso-8859-1] Mon Jun 22 12:51:28 2009 @@ -10,6 +10,13 @@ #define MI_MAX_INIT_NONPAGED_POOL_SIZE (128 * 1024 * 1024) #define MI_MAX_NONPAGED_POOL_SIZE (128 * 1024 * 1024) #define MI_MAX_FREE_PAGE_LISTS 4 + +typedef enum _MMSYSTEM_PTE_POOL_TYPE +{ + SystemPteSpace, + NonPagedPoolExpansion, + MaximumPtePoolTypes +} MMSYSTEM_PTE_POOL_TYPE;
extern MMPTE HyperTemplatePte;
@@ -24,4 +31,12 @@ VOID );
+VOID +NTAPI +MiInitializeSystemPtes( + IN PMMPTE StartingPte, + IN ULONG NumberOfPtes, + IN MMSYSTEM_PTE_POOL_TYPE PoolType +); + /* EOF */
Modified: trunk/reactos/ntoskrnl/mm/ARM3/pool.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/pool.c?rev... ============================================================================== --- trunk/reactos/ntoskrnl/mm/ARM3/pool.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/ARM3/pool.c [iso-8859-1] Mon Jun 22 12:51:28 2009 @@ -120,6 +120,9 @@ // guard page on top so make sure to skip it. The bottom guard page will be // guaranteed by the fact our size is off by one. // + MiInitializeSystemPtes(PointerPte + 1, + MiExpansionPoolPagesInitialCharge, + NonPagedPoolExpansion); }
/* EOF */
Added: trunk/reactos/ntoskrnl/mm/ARM3/syspte.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/syspte.c?r... ============================================================================== --- trunk/reactos/ntoskrnl/mm/ARM3/syspte.c (added) +++ trunk/reactos/ntoskrnl/mm/ARM3/syspte.c [iso-8859-1] Mon Jun 22 12:51:28 2009 @@ -1,0 +1,76 @@ +/* + * PROJECT: ReactOS Kernel + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: ntoskrnl/mm/ARM3/syspte.c + * PURPOSE: ARM Memory Manager System PTE Allocator + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +/* INCLUDES *******************************************************************/ + +#include <ntoskrnl.h> +#define NDEBUG +#include <debug.h> + +#line 15 "ARM³::SYSPTE" +#define MODULE_INVOLVED_IN_ARM3 +#include "../ARM3/miarm.h" + +/* GLOBALS ********************************************************************/ + +PMMPTE MmSystemPteBase; +PMMPTE MmSystemPtesStart[MaximumPtePoolTypes]; +PMMPTE MmSystemPtesEnd[MaximumPtePoolTypes]; +MMPTE MmFirstFreeSystemPte[MaximumPtePoolTypes]; +ULONG MmTotalFreeSystemPtes[MaximumPtePoolTypes]; + +/* PRIVATE FUNCTIONS **********************************************************/ + +VOID +NTAPI +MiInitializeSystemPtes(IN PMMPTE StartingPte, + IN ULONG NumberOfPtes, + IN MMSYSTEM_PTE_POOL_TYPE PoolType) +{ + // + // Sanity checks + // + ASSERT(NumberOfPtes >= 1); + ASSERT(PoolType == NonPagedPoolExpansion); + + // + // Set the starting and ending PTE addresses for this space + // + MmSystemPteBase = (PVOID)PAGETABLE_MAP; + MmSystemPtesStart[PoolType] = StartingPte; + MmSystemPtesEnd[PoolType] = StartingPte + NumberOfPtes - 1; + DPRINT1("System PTE space for %d starting at: %p and ending at: %p\n", + PoolType, MmSystemPtesStart[PoolType], MmSystemPtesEnd[PoolType]); + + // + // Clear all the PTEs to start with + // + RtlZeroMemory(StartingPte, NumberOfPtes * sizeof(MMPTE)); + + // + // Make the first entry free and link it + // + StartingPte->u.List.NextEntry = -1; + MmFirstFreeSystemPte[PoolType].u.Long = 0; + MmFirstFreeSystemPte[PoolType].u.List.NextEntry = StartingPte - + MmSystemPteBase; + + // + // The second entry stores the size of this PTE space + // + StartingPte++; + StartingPte->u.Long = 0; + StartingPte->u.List.NextEntry = NumberOfPtes; + + // + // We also keep a global for it + // + MmTotalFreeSystemPtes[PoolType] = NumberOfPtes; +} + +/* EOF */
Propchange: trunk/reactos/ntoskrnl/mm/ARM3/syspte.c ------------------------------------------------------------------------------ svn:eol-style = native
Propchange: trunk/reactos/ntoskrnl/mm/ARM3/syspte.c ------------------------------------------------------------------------------ svn:mime-type = text/plain
Modified: trunk/reactos/ntoskrnl/ntoskrnl-generic.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ntoskrnl-generic.r... ============================================================================== --- trunk/reactos/ntoskrnl/ntoskrnl-generic.rbuild [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/ntoskrnl-generic.rbuild [iso-8859-1] Mon Jun 22 12:51:28 2009 @@ -362,6 +362,7 @@ <directory name="ARM3"> <file>init.c</file> <file>pool.c</file> + <file>syspte.c</file> </directory> <file>anonmem.c</file> <file>balance.c</file>