Refactor processor affinity logic
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (i686, release) (push) Successful in 40s
Builds / ExectOS (amd64, release) (push) Successful in 43s

This commit is contained in:
2026-06-09 19:33:20 +02:00
parent e2eb784eef
commit 3841ceaf5b
3 changed files with 8 additions and 7 deletions

View File

@@ -28,7 +28,7 @@ ACPI_SYSTEM_INFO HL::Acpi::SystemInfo;
ACPI_TIMER_INFO HL::Acpi::TimerInfo;
/* Represents the number of active processors */
KAFFINITY HL::Cpu::ActiveProcessors;
KAFFINITY_MAP HL::Cpu::ActiveProcessors;
/* Metadata detailing the linear frame buffer geometry */
HL_FRAMEBUFFER_DATA HL::FrameBuffer::FrameBufferData;

View File

@@ -24,7 +24,7 @@ VOID
HL::Cpu::InitializeProcessor(VOID)
{
PKPROCESSOR_BLOCK ProcessorBlock;
KAFFINITY Affinity;
ULONG BlockIndex, BitIndex;
/* Get current processor block */
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
@@ -33,17 +33,18 @@ HL::Cpu::InitializeProcessor(VOID)
ProcessorBlock->StallScaleFactor = INITIAL_STALL_FACTOR;
ProcessorBlock->Idr = 0xFFFFFFFF;
/* Set processor affinity */
Affinity = (KAFFINITY) 1 << ProcessorBlock->CpuNumber;
/* Calculate the precise block and bit index for the affinity map */
BlockIndex = ProcessorBlock->CpuNumber / 64;
BitIndex = ProcessorBlock->CpuNumber % 64;
/* Apply affinity to a set of processors */
ActiveProcessors |= Affinity;
RTL::Atomic::Or64((PLONG_PTR)&ActiveProcessors.Bitmap[BlockIndex], ((KAFFINITY)1 << BitIndex));
/* Initialize APIC for this processor */
HL::Pic::InitializePic();
/* Set the APIC running level */
HL::RunLevel::SetRunLevel(KE::Processor::GetCurrentProcessorBlock()->RunLevel);
HL::RunLevel::SetRunLevel(ProcessorBlock->RunLevel);
}
/**