damn fingers were too fast. sorry, reverting

svn path=/trunk/; revision=14697
This commit is contained in:
Alex Ionescu 2005-04-19 06:26:01 +00:00
parent 05c22b76ae
commit 68a209fb2b
2 changed files with 37 additions and 74 deletions

View file

@ -19,7 +19,7 @@
extern PEPROCESS PsIdleProcess; extern PEPROCESS PsIdleProcess;
/* FUNCTIONS *****************************************************************/ /* FUNCTIONS *****************************************************************/
/** System idle thread procedure /** System idle thread procedure
* *
*/ */
@ -45,82 +45,45 @@ PsIdleThreadMain(PVOID Context)
} }
} }
/*
* 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(); /** Initialization of system idle thread
*
Thread = ExAllocatePool(NonPagedPool, sizeof(ETHREAD)); */
VOID INIT_FUNCTION
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
PsInitIdleThread(VOID) PsInitIdleThread(VOID)
{ {
PETHREAD IdleThread; NTSTATUS Status;
KIRQL oldIrql; PETHREAD IdleThread;
KIRQL oldIrql;
PsInitializeIdleOrFirstThread(PsIdleProcess, Status = PsInitializeThread(PsIdleProcess,
&IdleThread, &IdleThread,
PsIdleThreadMain, NULL,
KernelMode, KernelMode,
FALSE); 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 (); oldIrql = KeAcquireDispatcherDatabaseLock ();
KiUnblockThread(&IdleThread->Tcb, NULL, 0); KiUnblockThread(&IdleThread->Tcb, NULL, 0);
KeReleaseDispatcherDatabaseLock(oldIrql); 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);
} }

View file

@ -103,7 +103,7 @@ PsInitThreadManagment(VOID)
ObpCreateTypeObject(PsThreadType); ObpCreateTypeObject(PsThreadType);
PsInitializeIdleOrFirstThread(PsInitialSystemProcess, &FirstThread, NULL, KernelMode, TRUE); PsInitializeThread(NULL, &FirstThread, NULL, KernelMode, TRUE);
FirstThread->Tcb.State = Running; FirstThread->Tcb.State = Running;
FirstThread->Tcb.FreezeCount = 0; FirstThread->Tcb.FreezeCount = 0;
FirstThread->Tcb.UserAffinity = (1 << 0); /* Set the affinity of the first thread to the boot processor */ FirstThread->Tcb.UserAffinity = (1 << 0); /* Set the affinity of the first thread to the boot processor */