damn fingers were too fast. sorry, reverting
Modified: trunk/reactos/ntoskrnl/ps/idle.c
Modified: trunk/reactos/ntoskrnl/ps/psmgr.c
_____
Modified: trunk/reactos/ntoskrnl/ps/idle.c
--- trunk/reactos/ntoskrnl/ps/idle.c 2005-04-19 06:24:15 UTC (rev
14696)
+++ trunk/reactos/ntoskrnl/ps/idle.c 2005-04-19 06:26:01 UTC (rev
14697)
@@ -19,7 +19,7 @@
extern PEPROCESS PsIdleProcess;
/* FUNCTIONS
*****************************************************************/
-
+
/** System idle thread procedure
*
*/
@@ -45,82 +45,45 @@
}
}
-/*
- * HACK-O-RAMA
- * Antique vestigial code left alive for the sole purpose of First/Idle
Thread
- * creation until I can merge my fix for properly creating them.
- */
-NTSTATUS
-PsInitializeIdleOrFirstThread(PEPROCESS Process,
- PETHREAD* ThreadPtr,
- PKSTART_ROUTINE StartRoutine,
- KPROCESSOR_MODE AccessMode,
- BOOLEAN First)
-{
- PETHREAD Thread;
- PVOID KernelStack;
- extern unsigned int init_stack;
- PAGED_CODE();
-
- Thread = ExAllocatePool(NonPagedPool, sizeof(ETHREAD));
-
- RtlZeroMemory(Thread, sizeof(ETHREAD));
- Thread->ThreadsProcess = Process;
-
- DPRINT("Thread = %x\n",Thread);
-
- if (First)
- {
- KernelStack = (PVOID)init_stack;
- }
- else
- {
- KernelStack = MmCreateKernelStack(FALSE);
- }
-
- KeInitializeThread(&Process->Pcb,
- &Thread->Tcb,
- PspSystemThreadStartup,
- StartRoutine,
- NULL,
- NULL,
- NULL,
- KernelStack);
- Thread->Tcb.ApcQueueable = TRUE;
-
- InitializeListHead(&Thread->IrpList);
-
- DPRINT("Thread->Cid.UniqueThread %d\n",Thread->Cid.UniqueThread);
-
- *ThreadPtr = Thread;
-
- return STATUS_SUCCESS;
-}
-
-/*
- * HACK-O-RAMA
- * Antique vestigial code left alive for the sole purpose of First/Idle
Thread
- * creation until I can merge my fix for properly creating them.
- */
-VOID
-INIT_FUNCTION
+/** Initialization of system idle thread
+ *
+ */
+VOID INIT_FUNCTION
PsInitIdleThread(VOID)
{
- PETHREAD IdleThread;
- KIRQL oldIrql;
+ NTSTATUS Status;
+ PETHREAD IdleThread;
+ KIRQL oldIrql;
- PsInitializeIdleOrFirstThread(PsIdleProcess,
- &IdleThread,
- PsIdleThreadMain,
- KernelMode,
- FALSE);
+ Status = PsInitializeThread(PsIdleProcess,
+ &IdleThread,
+ NULL,
+ KernelMode,
+ FALSE);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Couldn't create idle system thread! Status: 0x%x\n",
Status);
+ KEBUGCHECK(0);
+ return;
+ }
+
+ IdleThread->StartAddress = PsIdleThreadMain;
+ Status = KiArchInitThread(&IdleThread->Tcb, PsIdleThreadMain, NULL);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Couldn't initialize system idle thread! Status:
0x%x\n", Status);
+ ObDereferenceObject(IdleThread);
+ KEBUGCHECK(0);
+ return;
+ }
- oldIrql = KeAcquireDispatcherDatabaseLock ();
- KiUnblockThread(&IdleThread->Tcb, NULL, 0);
- KeReleaseDispatcherDatabaseLock(oldIrql);
+ oldIrql = KeAcquireDispatcherDatabaseLock ();
+ KiUnblockThread(&IdleThread->Tcb, NULL, 0);
+ KeReleaseDispatcherDatabaseLock(oldIrql);
- KeGetCurrentPrcb()->IdleThread = &IdleThread->Tcb;
- KeSetPriorityThread(&IdleThread->Tcb, LOW_PRIORITY);
- KeSetAffinityThread(&IdleThread->Tcb, 1 << 0);
+ KeGetCurrentPrcb()->IdleThread = &IdleThread->Tcb;
+ KeSetPriorityThread(&IdleThread->Tcb, LOW_PRIORITY);
+ KeSetAffinityThread(&IdleThread->Tcb, 1 << 0);
+
}
_____
Modified: trunk/reactos/ntoskrnl/ps/psmgr.c
--- trunk/reactos/ntoskrnl/ps/psmgr.c 2005-04-19 06:24:15 UTC (rev
14696)
+++ trunk/reactos/ntoskrnl/ps/psmgr.c 2005-04-19 06:26:01 UTC (rev
14697)
@@ -103,7 +103,7 @@
ObpCreateTypeObject(PsThreadType);
- PsInitializeIdleOrFirstThread(PsInitialSystemProcess, &FirstThread,
NULL, KernelMode, TRUE);
+ PsInitializeThread(NULL, &FirstThread, NULL, KernelMode, TRUE);
FirstThread->Tcb.State = Running;
FirstThread->Tcb.FreezeCount = 0;
FirstThread->Tcb.UserAffinity = (1 << 0); /* Set the affinity of
the first thread to the boot processor */