From 35c4c3bbd5a55b933f0f31f3c10db11f5d811dc1 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 17 Nov 2022 19:10:21 +0200 Subject: [PATCH] Check if CPU 0 is active too --- Architecture/amd64/cpu/SymmetricMultiprocessing.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Architecture/amd64/cpu/SymmetricMultiprocessing.cpp b/Architecture/amd64/cpu/SymmetricMultiprocessing.cpp index 7d6b396..e78728b 100644 --- a/Architecture/amd64/cpu/SymmetricMultiprocessing.cpp +++ b/Architecture/amd64/cpu/SymmetricMultiprocessing.cpp @@ -33,7 +33,7 @@ CPUData *GetCurrentCPU() CPUData *data = (CPUData *)CPU::x64::rdmsr(CPU::x64::MSR_GS_BASE); if (data == nullptr && Interrupts::apic[0]) - data = &CPUs[((APIC::APIC *)Interrupts::apic[0])->Read(APIC::APIC_ID) >> 24]; + data = &CPUs[((APIC::APIC *)Interrupts::apic[0])->Read(APIC::APIC_ID) >> 24]; if (data == nullptr) return nullptr; // The caller should handle this. @@ -41,7 +41,10 @@ CPUData *GetCurrentCPU() if (!data->IsActive) { error("CPU %d is not active!", data->ID); - return &CPUs[0]; + if ((&CPUs[0])->IsActive) + return &CPUs[0]; + else + return nullptr; // We are in trouble. } assert(data->Checksum == CPU_DATA_CHECKSUM); // This should never happen. return data;