Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion kconfig/config/gd32e507_eval/debug/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR_TLSF=y
# CONFIG_ALLOCATOR_BUDDY is not set
CONFIG_ALLOCATOR="tlsf"
CONFIG_SOFT_TIMER=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/gd32e507_eval/release/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR_TLSF=y
# CONFIG_ALLOCATOR_BUDDY is not set
CONFIG_ALLOCATOR="tlsf"
CONFIG_SOFT_TIMER=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/gd32vw553_eval/coverage/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/gd32vw553_eval/debug/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/gd32vw553_eval/release/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_mps2_an385/coverage/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ CONFIG_ALLOCATOR="slab"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_mps2_an385/debug/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ CONFIG_ALLOCATOR="slab"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_mps2_an385/release/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ CONFIG_ALLOCATOR="slab"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_mps3_an547/coverage/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ CONFIG_ALLOCATOR="slab"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_mps3_an547/debug/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ CONFIG_ALLOCATOR="slab"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_mps3_an547/release/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR="slab"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_riscv32/coverage/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_riscv32/debug/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_riscv32/release/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_riscv64/coverage/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_riscv64/debug/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_riscv64/release/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_virt64_aarch64/coverage/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
# CONFIG_EVENT_FLAGS is not set
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_virt64_aarch64/debug/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
# CONFIG_EVENT_FLAGS is not set
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/qemu_virt64_aarch64/release/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
# CONFIG_EVENT_FLAGS is not set
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/raspberry_pico2_cortexm/debug/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR_TLSF=y
# CONFIG_ALLOCATOR_BUDDY is not set
CONFIG_ALLOCATOR="tlsf"
CONFIG_SOFT_TIMER=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/raspberry_pico2_cortexm/release/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR_TLSF=y
# CONFIG_ALLOCATOR_BUDDY is not set
CONFIG_ALLOCATOR="tlsf"
CONFIG_SOFT_TIMER=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/rk3568/coverage/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
CONFIG_EVENT_FLAGS=y
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/rk3568/debug/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
# CONFIG_EVENT_FLAGS is not set
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
2 changes: 1 addition & 1 deletion kconfig/config/rk3568/release/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ CONFIG_ALLOCATOR="tlsf"
#
CONFIG_SOFT_TIMER=y
# CONFIG_EVENT_FLAGS is not set
CONFIG_ROBIN_SCHEDULER=y
CONFIG_ROUND_ROBIN=y
CONFIG_ROBIN_SLICE=10
CONFIG_OVERFLOW_CHECK=y
CONFIG_STACK_HIGHWATER_CHECK=y
Expand Down
4 changes: 2 additions & 2 deletions kernel/src/scheduler/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ config EVENT_FLAGS
default n
bool "Enable event flags"

config ROBIN_SCHEDULER
config ROUND_ROBIN
default y
bool "Enable robin scheduler"

config ROBIN_SLICE
default 10
int "The tick slice of robin scheduler"
depends on ROBIN_SCHEDULER
depends on ROUND_ROBIN

config OVERFLOW_CHECK
default y
Expand Down
8 changes: 4 additions & 4 deletions kernel/src/scheduler/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ pub(crate) extern "C" fn save_context_finish_hook(

fn switch_current_thread(next: ThreadNode, old_sp: usize) -> usize {
let now = Tick::now();
#[cfg(robin_scheduler)]
#[cfg(round_robin)]
{
next.set_this_round_start_at(now);
let time_slices = next.refresh_time_slices();
Expand Down Expand Up @@ -228,7 +228,7 @@ fn switch_current_thread(next: ThreadNode, old_sp: usize) -> usize {
next_saved_sp,
next_priority,
);
#[cfg(robin_scheduler)]
#[cfg(round_robin)]
{
let start = old.this_round_start_at();
let elapsed = now.since(start);
Expand Down Expand Up @@ -460,9 +460,9 @@ pub fn current_thread_id() -> usize {
}

pub(crate) fn need_reschedule_at(moment: Tick) -> bool {
#[cfg(not(robin_scheduler))]
#[cfg(not(round_robin))]
return false;
#[cfg(robin_scheduler)]
#[cfg(round_robin)]
{
let this_thread = current_thread_ref();
if Thread::id(this_thread) == Thread::id(idle::current_idle_thread_ref()) {
Expand Down
18 changes: 9 additions & 9 deletions kernel/src/thread/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -228,18 +228,18 @@ pub struct Thread {
// - Check mutex's pending queue
acquired_mutexes: SpinLock<MutexList>,
signal_context: Option<Box<SignalContext>>,
#[cfg(robin_scheduler)]
#[cfg(round_robin)]
rr: RoundRobin,
}

#[cfg(robin_scheduler)]
#[cfg(round_robin)]
#[derive(Default, Debug)]
pub(crate) struct RoundRobin {
this_round_start_at: Cell<Tick>,
time_slices: Cell<Tick>,
}

#[cfg(robin_scheduler)]
#[cfg(round_robin)]
impl RoundRobin {
pub const fn new() -> Self {
Self {
Expand Down Expand Up @@ -443,7 +443,7 @@ impl Thread {
pending_on_mutex: ArcCas::new(None),
acquired_mutexes: SpinLock::new(MutexList::new()),
signal_context: None,
#[cfg(robin_scheduler)]
#[cfg(round_robin)]
rr: RoundRobin::new(),
}
}
Expand Down Expand Up @@ -752,23 +752,23 @@ impl Thread {
true
}

#[cfg(robin_scheduler)]
#[cfg(round_robin)]
pub fn this_round_start_at(&self) -> Tick {
self.rr.this_round_start_at.get()
}

#[cfg(robin_scheduler)]
#[cfg(round_robin)]
pub fn set_this_round_start_at(&self, moment: Tick) -> &Self {
self.rr.this_round_start_at.set(moment);
self
}

#[cfg(robin_scheduler)]
#[cfg(round_robin)]
pub fn remaining_time_slices(&self) -> Tick {
self.rr.time_slices.get()
}

#[cfg(robin_scheduler)]
#[cfg(round_robin)]
pub fn elapse_time_slices(&self, elapsed: Tick) -> Tick {
let old = self.rr.time_slices.get();
let diff = if elapsed.0 >= old.0 {
Expand All @@ -780,7 +780,7 @@ impl Thread {
diff
}

#[cfg(robin_scheduler)]
#[cfg(round_robin)]
pub fn refresh_time_slices(&self) -> Tick {
let mut current = self.rr.time_slices.get();
if current.0 != 0 {
Expand Down