forked from Bananymous/banan-os
Kernel: Scheduler now has reschedule()
This can be called from anywhere and just causes the scheduler to schedule the next thread. This is more efficient and verbose version of Scheduler::set_current_thread_sleeping(0), since we don't have to wake other threads or do other verifications.
This commit is contained in:
parent
b7fc2dc3d0
commit
27cef23823
|
@ -14,7 +14,9 @@ namespace Kernel
|
||||||
static Scheduler& get();
|
static Scheduler& get();
|
||||||
|
|
||||||
[[noreturn]] void start();
|
[[noreturn]] void start();
|
||||||
|
|
||||||
void timer_reschedule();
|
void timer_reschedule();
|
||||||
|
void reschedule();
|
||||||
void reschedule_if_idling();
|
void reschedule_if_idling();
|
||||||
|
|
||||||
void set_current_thread_sleeping(uint64_t);
|
void set_current_thread_sleeping(uint64_t);
|
||||||
|
|
|
@ -84,6 +84,21 @@ namespace Kernel
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Scheduler::reschedule()
|
||||||
|
{
|
||||||
|
VERIFY_STI();
|
||||||
|
DISABLE_INTERRUPTS();
|
||||||
|
|
||||||
|
if (save_current_thread())
|
||||||
|
{
|
||||||
|
ENABLE_INTERRUPTS();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
advance_current_thread();
|
||||||
|
execute_current_thread();
|
||||||
|
ASSERT_NOT_REACHED();
|
||||||
|
}
|
||||||
|
|
||||||
void Scheduler::reschedule_if_idling()
|
void Scheduler::reschedule_if_idling()
|
||||||
{
|
{
|
||||||
VERIFY_CLI();
|
VERIFY_CLI();
|
||||||
|
|
Loading…
Reference in New Issue