summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Kernel/Interrupts/InterruptManagement.cpp1
-rw-r--r--Kernel/Time/TimeManagement.cpp16
-rw-r--r--Kernel/init.cpp1
3 files changed, 10 insertions, 8 deletions
diff --git a/Kernel/Interrupts/InterruptManagement.cpp b/Kernel/Interrupts/InterruptManagement.cpp
index dee4223ef0..3e4530b7bd 100644
--- a/Kernel/Interrupts/InterruptManagement.cpp
+++ b/Kernel/Interrupts/InterruptManagement.cpp
@@ -182,6 +182,7 @@ UNMAP_AFTER_INIT void InterruptManagement::switch_to_ioapic_mode()
m_pci_interrupt_overrides = mp_parser->get_pci_interrupt_redirections();
}
+ APIC::initialize();
APIC::the().init_bsp();
}
diff --git a/Kernel/Time/TimeManagement.cpp b/Kernel/Time/TimeManagement.cpp
index 59c13ca68f..125464afcd 100644
--- a/Kernel/Time/TimeManagement.cpp
+++ b/Kernel/Time/TimeManagement.cpp
@@ -142,13 +142,15 @@ UNMAP_AFTER_INIT void TimeManagement::initialize(u32 cpu)
VERIFY(!s_the.is_initialized());
s_the.ensure_instance();
- // Initialize the APIC timers after the other timers as the
- // initialization needs to briefly enable interrupts, which then
- // would trigger a deadlock trying to get the s_the instance while
- // creating it.
- if (auto* apic_timer = APIC::the().initialize_timers(*s_the->m_system_timer)) {
- dmesgln("Time: Using APIC timer as system timer");
- s_the->set_system_timer(*apic_timer);
+ if (APIC::initialized()) {
+ // Initialize the APIC timers after the other timers as the
+ // initialization needs to briefly enable interrupts, which then
+ // would trigger a deadlock trying to get the s_the instance while
+ // creating it.
+ if (auto* apic_timer = APIC::the().initialize_timers(*s_the->m_system_timer)) {
+ dmesgln("Time: Using APIC timer as system timer");
+ s_the->set_system_timer(*apic_timer);
+ }
}
s_the->m_time_page_region = MM.allocate_kernel_region(PAGE_SIZE, "Time page"sv, Memory::Region::Access::ReadWrite, AllocationStrategy::AllocateNow).release_value();
diff --git a/Kernel/init.cpp b/Kernel/init.cpp
index bddef41521..e3d6f99691 100644
--- a/Kernel/init.cpp
+++ b/Kernel/init.cpp
@@ -203,7 +203,6 @@ extern "C" [[noreturn]] UNMAP_AFTER_INIT void init(BootInfo const& boot_info)
for (ctor_func_t* ctor = start_ctors; ctor < end_ctors; ctor++)
(*ctor)();
- APIC::initialize();
InterruptManagement::initialize();
ACPI::initialize();