diff --git a/kernel/sched.c b/kernel/sched.c index 7cc4c6451be..756a38fb7a7 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -361,6 +361,12 @@ void k_sched_time_slice_set(int32_t slice, int prio) LOCKED(&sched_spinlock) { _current_cpu->slice_ticks = 0; slice_time = k_ms_to_ticks_ceil32(slice); + if (IS_ENABLED(CONFIG_TICKLESS_KERNEL) && slice > 0) { + /* It's not possible to reliably set a 1-tick + * timeout if ticks aren't regular. + */ + slice_time = MAX(2, slice_time); + } slice_max_prio = prio; z_reset_time_slice(); } diff --git a/tests/kernel/mem_protect/syscalls/prj.conf b/tests/kernel/mem_protect/syscalls/prj.conf index c579ae5c989..0b123068b3d 100644 --- a/tests/kernel/mem_protect/syscalls/prj.conf +++ b/tests/kernel/mem_protect/syscalls/prj.conf @@ -1,5 +1,5 @@ CONFIG_ZTEST=y CONFIG_TEST_USERSPACE=y CONFIG_TIMESLICING=y -CONFIG_TIMESLICE_SIZE=10 +CONFIG_TIMESLICE_SIZE=20 CONFIG_APPLICATION_DEFINED_SYSCALL=y diff --git a/tests/kernel/workq/critical/src/main.c b/tests/kernel/workq/critical/src/main.c index 44fa9107b0f..b3739fb7d40 100644 --- a/tests/kernel/workq/critical/src/main.c +++ b/tests/kernel/workq/critical/src/main.c @@ -166,7 +166,7 @@ void regression_thread(void *arg1, void *arg2, void *arg3) "Unexpected value for "); TC_PRINT("Enable timeslicing at %u\n", k_uptime_get_32()); - k_sched_time_slice_set(10, 10); + k_sched_time_slice_set(20, 10); k_sem_give(&ALT_SEM); /* Re-activate alternate_thread() */