summaryrefslogtreecommitdiff
path: root/Kernel/Arch/x86
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Arch/x86')
-rw-r--r--Kernel/Arch/x86/CPU.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/Kernel/Arch/x86/CPU.h b/Kernel/Arch/x86/CPU.h
index 488443a7fc..060821cba7 100644
--- a/Kernel/Arch/x86/CPU.h
+++ b/Kernel/Arch/x86/CPU.h
@@ -623,6 +623,11 @@ struct DeferredCallEntry {
bool was_allocated;
};
+class Processor;
+// Note: We only support processors at most at the moment,
+// so allocate 8 slots of inline capacity in the container.
+using ProcessorContainer = Array<Processor*, 8>;
+
class Processor {
friend class ProcessorInfo;
@@ -665,7 +670,7 @@ class Processor {
void gdt_init();
void write_raw_gdt_entry(u16 selector, u32 low, u32 high);
void write_gdt_entry(u16 selector, Descriptor& descriptor);
- static Vector<Processor*>& processors();
+ static ProcessorContainer& processors();
static void smp_return_to_pool(ProcessorMessage& msg);
static ProcessorMessage& smp_get_from_pool();
@@ -751,8 +756,10 @@ public:
{
auto& procs = processors();
size_t count = procs.size();
- for (size_t i = 0; i < count; i++)
- callback(*procs[i]);
+ for (size_t i = 0; i < count; i++) {
+ if (procs[i] != nullptr)
+ callback(*procs[i]);
+ }
return IterationDecision::Continue;
}