[ros-diffs] [ion] 20782: - Implement (although non-optimally) MmGrowKernelStack for future use.

ion at svn.reactos.org ion at svn.reactos.org
Wed Jan 11 07:41:08 CET 2006


- Implement (although non-optimally) MmGrowKernelStack for future use.
Modified: trunk/reactos/ntoskrnl/mm/process.c
  _____  

Modified: trunk/reactos/ntoskrnl/mm/process.c
--- trunk/reactos/ntoskrnl/mm/process.c	2006-01-11 06:01:54 UTC (rev
20781)
+++ trunk/reactos/ntoskrnl/mm/process.c	2006-01-11 06:40:41 UTC (rev
20782)
@@ -166,7 +166,11 @@

         KEBUGCHECK(0);
     }
 
-    /* Mark the Stack in use */
+    /*
+     * Mark the Stack in use.
+     * Note: Currently we mark all 60KB in use for a GUI Thread.
+     * We should only do this inside MmGrowKernelStack. TODO!
+     */
     for (i = 0; i < (StackSize / PAGE_SIZE); i++)
     {
         Status = MmRequestPageMemoryConsumer(MC_NPPOOL, TRUE,
&Page[i]);
@@ -197,9 +201,24 @@
 STDCALL
 MmGrowKernelStack(PVOID StackPointer)
 {
-    DPRINT1("We don't support expansion yet :(\n");
-    KEBUGCHECK(0);
-    return STATUS_NOT_IMPLEMENTED;
+    PETHREAD Thread = PsGetCurrentThread();
+
+    /* Make sure we have reserved space for our grow */
+    ASSERT(((PCHAR)Thread->Tcb.StackBase -
(PCHAR)Thread->Tcb.StackLimit) <=
+           (KERNEL_LARGE_STACK_SIZE + PAGE_SIZE));
+
+    /* 
+     * We'll give you three more pages.
+     * NOTE: See note in MmCreateKernelStack. These pages are already
being reserved.
+     * It would be more efficient to only grow them (commit them) here.
+     */
+    Thread->Tcb.StackLimit -= KERNEL_STACK_SIZE;
+
+    /* Return success */
+    DPRINT1("Thread, Thread Limit, Stack %p %p %p\n",
KeGetCurrentThread(),
+
KeGetCurrentThread()->StackLimit,
+                                                      StackPointer);
+    return STATUS_SUCCESS;
 }
 
 NTSTATUS
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20060111/644f4dad/attachment.html


More information about the Ros-diffs mailing list