Kernel: Add Processor::wait_for_interrupt and use it in Scheduler

This removes the x86 specific hlt instruction from the scheduler, and
allows us to run the scheduler code for aarch64 by implementing
Processor::wait_for_interrupt for aarch64.
This commit is contained in:
Timon Kruiper 2022-12-22 13:24:19 +01:00 committed by Andrew Kaster
parent f232133f65
commit f6f43fd65e
Notes: sideshowbarker 2024-07-17 02:28:45 +09:00
3 changed files with 13 additions and 4 deletions

View File

@ -56,12 +56,17 @@ public:
void idle_begin() const
{
TODO_AARCH64();
// FIXME: Implement this when SMP for aarch64 is supported.
}
void idle_end() const
{
TODO_AARCH64();
// FIXME: Implement this when SMP for aarch64 is supported.
}
void wait_for_interrupt() const
{
asm("wfi");
}
ALWAYS_INLINE static void pause()

View File

@ -150,6 +150,11 @@ public:
s_idle_cpu_mask.fetch_and(~(1u << m_cpu), AK::MemoryOrder::memory_order_relaxed);
}
void wait_for_interrupt() const
{
asm("hlt");
}
static Processor& by_id(u32);
static u32 count()

View File

@ -479,8 +479,7 @@ void Scheduler::idle_loop(void*)
for (;;) {
proc.idle_begin();
asm("hlt");
proc.wait_for_interrupt();
proc.idle_end();
VERIFY_INTERRUPTS_ENABLED();
yield();