mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
damn fingers were too fast. sorry, reverting
svn path=/trunk/; revision=14697
This commit is contained in:
parent
05c22b76ae
commit
68a209fb2b
2 changed files with 37 additions and 74 deletions
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in a new issue