From 07dd3a3809f4dbda0d3f45e2bfbe47c012130ae6 Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Sat, 14 Jun 2003 17:46:24 +0000 Subject: [PATCH] - Added a boot option for reducing the used memory size ('/maxmem=used_memory_in_mb'). svn path=/trunk/; revision=4890 --- reactos/ntoskrnl/include/internal/mm.h | 3 ++- reactos/ntoskrnl/ke/main.c | 37 +++++++++++++++++++++++--- reactos/ntoskrnl/mm/mminit.c | 13 ++++++--- 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 4b47d0c9a0e..e6916975e85 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -319,7 +319,8 @@ VOID MmInit1(ULONG FirstKernelPhysAddress, ULONG LastKernelPhysAddress, ULONG LastKernelAddress, PADDRESS_RANGE BIOSMemoryMap, - ULONG AddressRangeCount); + ULONG AddressRangeCount, + ULONG MaxMemInMeg); VOID MmInit2(VOID); VOID MmInit3(VOID); NTSTATUS MmInitPagerThread(VOID); diff --git a/reactos/ntoskrnl/ke/main.c b/reactos/ntoskrnl/ke/main.c index 4eedaac2d42..233292653da 100644 --- a/reactos/ntoskrnl/ke/main.c +++ b/reactos/ntoskrnl/ke/main.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: main.c,v 1.160 2003/06/07 16:16:39 chorns Exp $ +/* $Id: main.c,v 1.161 2003/06/14 17:46:24 hbirr Exp $ * * PROJECT: ReactOS kernel * FILE: ntoskrnl/ke/main.c @@ -314,6 +314,8 @@ ExpInitializeExecutive(VOID) CHAR str[50]; NTSTATUS Status; BOOLEAN SetupBoot; + PCHAR p1, p2; + ULONG MaxMem; /* * Fail at runtime if someone has changed various structures without @@ -343,12 +345,41 @@ ExpInitializeExecutive(VOID) KeLowerIrql(DISPATCH_LEVEL); NtEarlyInitVdm(); - + + p1 = (PCHAR)KeLoaderBlock.CommandLine; + + MaxMem = 0; + while(*p1 && (p2 = strchr(p1, '/'))) + { + p2++; + if (!_strnicmp(p2, "MAXMEM", 6)) + { + p2 += 6; + while (isspace(*p2)) p2++; + if (*p2 == '=') + { + p2++; + while(isspace(*p2)) p2++; + if (isdigit(*p2)) + { + while (isdigit(*p2)) + { + MaxMem = MaxMem * 10 + *p2 - '0'; + p2++; + } + break; + } + } + } + p1 = p2; + } + MmInit1(FirstKrnlPhysAddr, LastKrnlPhysAddr, LastKernelAddress, (PADDRESS_RANGE)&KeMemoryMap, - KeMemoryMapRangeCount); + KeMemoryMapRangeCount, + MaxMem > 8 ? MaxMem : 4096); /* Import ANSI code page table */ for (i = 1; i < KeLoaderBlock.ModsCount; i++) diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index 875fc95517e..0214465e4ff 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -1,4 +1,4 @@ -/* $Id: mminit.c,v 1.46 2003/05/17 19:16:03 ekohl Exp $ +/* $Id: mminit.c,v 1.47 2003/06/14 17:46:24 hbirr Exp $ * * COPYRIGHT: See COPYING in the top directory * PROJECT: ReactOS kernel @@ -209,7 +209,8 @@ VOID MmInit1(ULONG FirstKrnlPhysAddr, ULONG LastKrnlPhysAddr, ULONG LastKernelAddress, PADDRESS_RANGE BIOSMemoryMap, - ULONG AddressRangeCount) + ULONG AddressRangeCount, + ULONG MaxMem) /* * FUNCTION: Initalize memory managment */ @@ -225,7 +226,6 @@ VOID MmInit1(ULONG FirstKrnlPhysAddr, LastKrnlPhysAddr, LastKernelAddress); - MmInitGlobalKernelPageDirectory(); if ((BIOSMemoryMap != NULL) && (AddressRangeCount > 0)) { @@ -245,6 +245,11 @@ VOID MmInit1(ULONG FirstKrnlPhysAddr, } } + if (KeLoaderBlock.MemHigher >= (MaxMem - 1) * 1024) + { + KeLoaderBlock.MemHigher = (MaxMem - 1) * 1024; + } + /* * FIXME: Set this based on the system command line */ @@ -252,6 +257,8 @@ VOID MmInit1(ULONG FirstKrnlPhysAddr, MmUserProbeAddress = (PVOID)0x7fff0000; MmHighestUserAddress = (PVOID)0x7ffeffff; + MmInitGlobalKernelPageDirectory(); + /* * Initialize memory managment statistics */