Dynamically allocate active processors affinity map
Some checks failed
Builds / ExectOS (i686, release) (push) Failing after 27s
Builds / ExectOS (amd64, release) (push) Failing after 31s
Builds / ExectOS (i686, debug) (push) Failing after 56s
Builds / ExectOS (amd64, debug) (push) Failing after 59s

This commit is contained in:
2026-06-10 10:22:15 +02:00
parent cf4b91ac83
commit 7a27912dac
4 changed files with 31 additions and 3 deletions

View File

@@ -32,8 +32,12 @@ HL::Cpu::InitializeProcessor(VOID)
ProcessorBlock->StallScaleFactor = INITIAL_STALL_FACTOR; ProcessorBlock->StallScaleFactor = INITIAL_STALL_FACTOR;
ProcessorBlock->Idr = 0xFFFFFFFF; ProcessorBlock->Idr = 0xFFFFFFFF;
/* Check if active processors map is initialized */
if(ActiveProcessors != NULLPTR)
{
/* Register this CPU in the global active processors map */ /* Register this CPU in the global active processors map */
KE::Affinity::AtomicSetProcessorAffinity(&ActiveProcessors, ProcessorBlock->CpuNumber); KE::Affinity::AtomicSetProcessorAffinity(ActiveProcessors, ProcessorBlock->CpuNumber);
}
/* Initialize APIC for this processor */ /* Initialize APIC for this processor */
HL::Pic::InitializePic(); HL::Pic::InitializePic();
@@ -42,6 +46,27 @@ HL::Cpu::InitializeProcessor(VOID)
HL::RunLevel::SetRunLevel(ProcessorBlock->RunLevel); HL::RunLevel::SetRunLevel(ProcessorBlock->RunLevel);
} }
XTAPI
XTSTATUS
HL::Cpu::InitializeProcessorAffinity(VOID)
{
XTSTATUS Status;
/* Allocate an array of pointers */
Status = KE::Affinity::CreateAffinityMap(KE::Processor::GetInstalledCpus(), &ActiveProcessors);
if(Status != STATUS_SUCCESS)
{
/* Failed to allocate memory, return error */
return Status;
}
/* Register BSP in the global active processors map */
KE::Affinity::SetProcessorAffinity(ActiveProcessors, 0);
/* Return success */
return STATUS_SUCCESS;
}
/** /**
* Wakes up and initializes all Application Processors (APs) and transitions them into the active kernel. * Wakes up and initializes all Application Processors (APs) and transitions them into the active kernel.
* *

View File

@@ -18,10 +18,11 @@ namespace HL
class Cpu class Cpu
{ {
private: private:
STATIC KAFFINITY_MAP ActiveProcessors; STATIC PKAFFINITY_MAP ActiveProcessors;
public: public:
STATIC XTAPI VOID InitializeProcessor(VOID); STATIC XTAPI VOID InitializeProcessor(VOID);
STATIC XTAPI XTSTATUS InitializeProcessorAffinity(VOID);
STATIC XTAPI XTSTATUS StartAllProcessors(VOID); STATIC XTAPI XTSTATUS StartAllProcessors(VOID);
}; };
} }

View File

@@ -119,6 +119,7 @@ KE::KernelInit::BootstrapKernel(VOID)
/* Start all application processors */ /* Start all application processors */
KE::Processor::InitializeProcessorBlocks(); KE::Processor::InitializeProcessorBlocks();
HL::Cpu::InitializeProcessorAffinity();
HL::Cpu::StartAllProcessors(); HL::Cpu::StartAllProcessors();
/* Register DISPATCH interrupt handler */ /* Register DISPATCH interrupt handler */

View File

@@ -119,6 +119,7 @@ KE::KernelInit::BootstrapKernel(VOID)
/* Start all application processors */ /* Start all application processors */
KE::Processor::InitializeProcessorBlocks(); KE::Processor::InitializeProcessorBlocks();
HL::Cpu::InitializeProcessorAffinity();
HL::Cpu::StartAllProcessors(); HL::Cpu::StartAllProcessors();
/* Register DISPATCH interrupt handler */ /* Register DISPATCH interrupt handler */