From 08adc0dc7f78ca24d8bbb16ebefe32c98154ac2b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 16 Feb 2021 12:58:02 +0100 Subject: rtems: Add _Modes_Apply_timeslice_to_thread() Update #4244. --- cpukit/include/rtems/rtems/modesimpl.h | 22 ++++++++++++++++++++++ cpukit/rtems/src/taskmode.c | 10 ++-------- 2 files changed, 24 insertions(+), 8 deletions(-) (limited to 'cpukit') diff --git a/cpukit/include/rtems/rtems/modesimpl.h b/cpukit/include/rtems/rtems/modesimpl.h index 9a2c6e1013..924e12fbee 100644 --- a/cpukit/include/rtems/rtems/modesimpl.h +++ b/cpukit/include/rtems/rtems/modesimpl.h @@ -22,6 +22,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -133,6 +134,27 @@ RTEMS_INLINE_ROUTINE bool _Modes_Is_preempt_mode_supported( } #endif +/** + * @brief Applies the timeslice mode to the thread. + * + * @param mode_set is the mode set which specifies the timeslice mode for the + * thread. + * + * @param[out] the_thread is the thread to apply the timeslice mode. + */ +RTEMS_INLINE_ROUTINE void _Modes_Apply_timeslice_to_thread( + rtems_mode mode_set, + Thread_Control *the_thread +) +{ + if ( _Modes_Is_timeslice( mode_set ) ) { + the_thread->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE; + the_thread->cpu_time_budget = rtems_configuration_get_ticks_per_timeslice(); + } else { + the_thread->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE; + } +} + #ifdef __cplusplus } #endif diff --git a/cpukit/rtems/src/taskmode.c b/cpukit/rtems/src/taskmode.c index 6ca4e99fc6..6287d44ac1 100644 --- a/cpukit/rtems/src/taskmode.c +++ b/cpukit/rtems/src/taskmode.c @@ -27,7 +27,6 @@ #include #include #include -#include rtems_status_code rtems_task_mode( rtems_mode mode_set, @@ -98,13 +97,8 @@ rtems_status_code rtems_task_mode( executing->is_preemptible = is_preempt_enabled; } - if ( mask & RTEMS_TIMESLICE_MASK ) { - if ( _Modes_Is_timeslice(mode_set) ) { - executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE; - executing->cpu_time_budget = - rtems_configuration_get_ticks_per_timeslice(); - } else - executing->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE; + if ( ( mask & RTEMS_TIMESLICE_MASK ) != 0 ) { + _Modes_Apply_timeslice_to_thread( mode_set, executing ); } if ( ( mask & RTEMS_INTERRUPT_MASK ) != 0 ) { -- cgit v1.2.3