[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