mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 23:37:35 +00:00
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:
parent
f232133f65
commit
f6f43fd65e
3 changed files with 13 additions and 4 deletions
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue