mirror of
https://github.com/RGBCube/serenity
synced 2025-07-03 05:32:13 +00:00
Kernel: Set up and calibrate APIC timer, and enable timer on all CPUs
This enables the APIC timer on all CPUs, which means Scheduler::timer_tick is now called on all CPUs independently. We still don't do anything on the APs as it instantly crashes due to a number of other problems.
This commit is contained in:
parent
9d347352a1
commit
fe615e601a
14 changed files with 478 additions and 70 deletions
|
@ -777,15 +777,19 @@ void Scheduler::timer_tick(const RegisterState& regs)
|
|||
ASSERT_INTERRUPTS_DISABLED();
|
||||
ASSERT(Processor::current().in_irq());
|
||||
|
||||
if (Processor::current().id() > 0)
|
||||
return;
|
||||
auto current_thread = Processor::current().current_thread();
|
||||
if (!current_thread)
|
||||
return;
|
||||
|
||||
++g_uptime;
|
||||
bool is_bsp = Processor::current().id() == 0;
|
||||
if (!is_bsp)
|
||||
return; // TODO: This prevents scheduling on other CPUs!
|
||||
if (is_bsp) {
|
||||
// TODO: We should probably move this out of the scheduler
|
||||
++g_uptime;
|
||||
|
||||
g_timeofday = TimeManagement::now_as_timeval();
|
||||
g_timeofday = TimeManagement::now_as_timeval();
|
||||
}
|
||||
|
||||
if (current_thread->process().is_profiling()) {
|
||||
SmapDisabler disabler;
|
||||
|
@ -799,7 +803,8 @@ void Scheduler::timer_tick(const RegisterState& regs)
|
|||
}
|
||||
}
|
||||
|
||||
TimerQueue::the().fire();
|
||||
if (is_bsp)
|
||||
TimerQueue::the().fire();
|
||||
|
||||
if (current_thread->tick())
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue