Delegate idle process and thread setup to PS subsystem
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 35s
Builds / ExectOS (i686, debug) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 44s
Builds / ExectOS (amd64, release) (push) Successful in 46s

This commit is contained in:
2026-06-04 13:14:21 +02:00
parent 02d0f3f538
commit 75e7760d04
3 changed files with 11 additions and 52 deletions

View File

@@ -26,8 +26,6 @@ VOID
KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock) KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock)
{ {
PKPROCESSOR_CONTROL_BLOCK ControlBlock; PKPROCESSOR_CONTROL_BLOCK ControlBlock;
PKPROCESS IdleProcess;
PETHREAD IdleThread;
/* Initialize application CPU */ /* Initialize application CPU */
AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures); AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures);
@@ -59,15 +57,8 @@ KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlo
/* Initialize local clock for this CPU */ /* Initialize local clock for this CPU */
HL::Timer::InitializeLocalClock(); HL::Timer::InitializeLocalClock();
/* Allocate and wipe memory for Idle thread */ /* Create and initialize IDLE thread */
MM::Allocator::AllocatePool(NonPagedPool, sizeof(ETHREAD), (PVOID *)&IdleThread); PS::Thread::CreateIdleThread(ControlBlock, StartBlock->Stack);
RTL::Memory::ZeroMemory(IdleThread, sizeof(ETHREAD));
/* Initialize Idle thread */
IdleProcess = KE::KProcess::GetIdleProcess();
ControlBlock->CurrentThread = &IdleThread->ThreadControlBlock;
ControlBlock->IdleThread = &IdleThread->ThreadControlBlock;
KE::KThread::InitializeIdleThread(IdleProcess, &IdleThread->ThreadControlBlock, ControlBlock, StartBlock->Stack);
/* Register DISPATCH interrupt handler */ /* Register DISPATCH interrupt handler */
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt); HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
@@ -91,16 +82,9 @@ VOID
KE::KernelInit::BootstrapKernel(VOID) KE::KernelInit::BootstrapKernel(VOID)
{ {
PKPROCESSOR_CONTROL_BLOCK Prcb; PKPROCESSOR_CONTROL_BLOCK Prcb;
ULONG_PTR PageDirectory[2];
PKPROCESS CurrentProcess;
PKTHREAD CurrentThread;
/* Get processor control block and current thread */ /* Get processor control block */
Prcb = KE::Processor::GetCurrentProcessorControlBlock(); Prcb = KE::Processor::GetCurrentProcessorControlBlock();
CurrentThread = KE::Processor::GetCurrentThread();
/* Get current process */
CurrentProcess = CurrentThread->ApcState.Process;
/* Initialize CPU power state structures */ /* Initialize CPU power state structures */
PO::Idle::InitializeProcessorIdleState(Prcb); PO::Idle::InitializeProcessorIdleState(Prcb);
@@ -124,11 +108,8 @@ KE::KernelInit::BootstrapKernel(VOID)
/* Enable shadow buffer for framebuffer */ /* Enable shadow buffer for framebuffer */
HL::FrameBuffer::EnableShadowBuffer(); HL::FrameBuffer::EnableShadowBuffer();
/* Initialize Idle process and Idle thread */ /* Create and initialize IDLE process */
PageDirectory[0] = 0; PS::Process::CreateIdleProcess(Prcb);
PageDirectory[1] = 0;
KE::KProcess::InitializeIdleProcess(CurrentProcess, PageDirectory);
KE::KThread::InitializeIdleThread(CurrentProcess, CurrentThread, Prcb, AR::ProcessorSupport::GetBootStack());
/* Start all application processors */ /* Start all application processors */
KE::Processor::InitializeProcessorBlocks(); KE::Processor::InitializeProcessorBlocks();

View File

@@ -26,8 +26,6 @@ VOID
KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock) KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock)
{ {
PKPROCESSOR_CONTROL_BLOCK ControlBlock; PKPROCESSOR_CONTROL_BLOCK ControlBlock;
PKPROCESS IdleProcess;
PETHREAD IdleThread;
/* Initialize application CPU */ /* Initialize application CPU */
AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures); AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures);
@@ -59,15 +57,8 @@ KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlo
/* Initialize local clock for this CPU */ /* Initialize local clock for this CPU */
HL::Timer::InitializeLocalClock(); HL::Timer::InitializeLocalClock();
/* Allocate and wipe memory for Idle thread */ /* Create and initialize IDLE thread */
MM::Allocator::AllocatePool(NonPagedPool, sizeof(ETHREAD), (PVOID *)&IdleThread); PS::Thread::CreateIdleThread(ControlBlock, StartBlock->Stack);
RTL::Memory::ZeroMemory(IdleThread, sizeof(ETHREAD));
/* Initialize Idle thread */
IdleProcess = KE::KProcess::GetIdleProcess();
ControlBlock->CurrentThread = &IdleThread->ThreadControlBlock;
ControlBlock->IdleThread = &IdleThread->ThreadControlBlock;
KE::KThread::InitializeIdleThread(IdleProcess, &IdleThread->ThreadControlBlock, ControlBlock, StartBlock->Stack);
/* Register DISPATCH interrupt handler */ /* Register DISPATCH interrupt handler */
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt); HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
@@ -91,16 +82,9 @@ VOID
KE::KernelInit::BootstrapKernel(VOID) KE::KernelInit::BootstrapKernel(VOID)
{ {
PKPROCESSOR_CONTROL_BLOCK Prcb; PKPROCESSOR_CONTROL_BLOCK Prcb;
ULONG_PTR PageDirectory[2];
PKPROCESS CurrentProcess;
PKTHREAD CurrentThread;
/* Get processor control block and current thread */ /* Get processor control block */
Prcb = KE::Processor::GetCurrentProcessorControlBlock(); Prcb = KE::Processor::GetCurrentProcessorControlBlock();
CurrentThread = KE::Processor::GetCurrentThread();
/* Get current process */
CurrentProcess = CurrentThread->ApcState.Process;
/* Initialize CPU power state structures */ /* Initialize CPU power state structures */
PO::Idle::InitializeProcessorIdleState(Prcb); PO::Idle::InitializeProcessorIdleState(Prcb);
@@ -124,11 +108,8 @@ KE::KernelInit::BootstrapKernel(VOID)
/* Enable shadow buffer for framebuffer */ /* Enable shadow buffer for framebuffer */
HL::FrameBuffer::EnableShadowBuffer(); HL::FrameBuffer::EnableShadowBuffer();
/* Initialize Idle process and Idle thread */ /* Create and initialize IDLE process */
PageDirectory[0] = 0; PS::Process::CreateIdleProcess(Prcb);
PageDirectory[1] = 0;
KE::KProcess::InitializeIdleProcess(CurrentProcess, PageDirectory);
KE::KThread::InitializeIdleThread(CurrentProcess, CurrentThread, Prcb, AR::ProcessorSupport::GetBootStack());
/* Start all application processors */ /* Start all application processors */
KE::Processor::InitializeProcessorBlocks(); KE::Processor::InitializeProcessorBlocks();

View File

@@ -50,10 +50,7 @@ PS::Thread::CreateIdleThread(IN PKPROCESSOR_CONTROL_BLOCK Prcb,
Prcb->IdleThread = &IdleThread->ThreadControlBlock; Prcb->IdleThread = &IdleThread->ThreadControlBlock;
/* Initialize the IDLE thread */ /* Initialize the IDLE thread */
KE::KThread::InitializeIdleThread(IdleProcess, KE::KThread::InitializeIdleThread(IdleProcess, &IdleThread->ThreadControlBlock, Prcb, Stack);
&IdleThread->ThreadControlBlock,
Prcb,
Stack);
/* Return success */ /* Return success */
return STATUS_SUCCESS; return STATUS_SUCCESS;