summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src/psxtransschedparam.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-10-27 12:59:09 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-11-15 08:56:53 +0100
commit240a1f79b1fcb58b9ae7bfc393e1f890e4492683 (patch)
tree92c47fa4899b2f0a8306e32bc18d66fbbf6b216f /cpukit/posix/src/psxtransschedparam.c
parentscore: Do not shadow parameter (diff)
downloadrtems-240a1f79b1fcb58b9ae7bfc393e1f890e4492683.tar.bz2
score: Introduce CPU budget operations
This patch set replaces the CPU budget algorithm enumeration with a set of CPU budget operations which implement a particular CPU budget algorithm. This helps to hide the CPU budget algorithm implementation details from the general thread handling. The CPU budget callouts are turned into CPU budget operations. This slightly reduces the size of the thread control block. All schedulers used the default scheduler tick implementation. The tick scheduler operation is removed and the CPU budget operations are directly used in _Watchdog_Tick() if the executing thread uses a CPU budget algorithm. This is performance improvement for all threads which do not use a CPU budget algorithm (default behaviour).
Diffstat (limited to 'cpukit/posix/src/psxtransschedparam.c')
-rw-r--r--cpukit/posix/src/psxtransschedparam.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/cpukit/posix/src/psxtransschedparam.c b/cpukit/posix/src/psxtransschedparam.c
index eba26d4932..f97924e011 100644
--- a/cpukit/posix/src/psxtransschedparam.c
+++ b/cpukit/posix/src/psxtransschedparam.c
@@ -23,22 +23,27 @@
#include <errno.h>
#include <rtems/posix/pthreadimpl.h>
+#include <rtems/score/threadcpubudget.h>
int _POSIX_Thread_Translate_to_sched_policy(
- Thread_CPU_budget_algorithms budget_algorithm
+ const Thread_CPU_budget_operations *operations
)
{
- switch ( budget_algorithm ) {
- case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE:
- return SCHED_OTHER;
- case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
- return SCHED_RR;
- case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
- return SCHED_SPORADIC;
- default:
- _Assert( budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE );
- return SCHED_FIFO;
+ if ( operations == NULL ) {
+ return SCHED_FIFO;
}
+
+ if ( operations == &_Thread_CPU_budget_exhaust_timeslice ) {
+ return SCHED_RR;
+ }
+
+#if defined(RTEMS_POSIX_API)
+ if ( operations == &_POSIX_Threads_Sporadic_budget ) {
+ return SCHED_SPORADIC;
+ }
+#endif
+
+ return SCHED_OTHER;
}
int _POSIX_Thread_Translate_sched_param(
@@ -47,23 +52,19 @@ int _POSIX_Thread_Translate_sched_param(
Thread_Configuration *config
)
{
- config->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
- config->budget_callout = NULL;
- config->cpu_time_budget = 0;
+ config->cpu_budget_operations = NULL;
- if ( policy == SCHED_OTHER ) {
- config->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
+ if ( policy == SCHED_FIFO ) {
return 0;
}
- if ( policy == SCHED_FIFO ) {
- config->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
+ if ( policy == SCHED_OTHER ) {
+ config->cpu_budget_operations = &_Thread_CPU_budget_reset_timeslice;
return 0;
}
if ( policy == SCHED_RR ) {
- config->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE;
- config->cpu_time_budget = rtems_configuration_get_ticks_per_timeslice();
+ config->cpu_budget_operations = &_Thread_CPU_budget_exhaust_timeslice;
return 0;
}
@@ -81,8 +82,7 @@ int _POSIX_Thread_Translate_sched_param(
_Timespec_To_ticks( &param->sched_ss_init_budget ) )
return EINVAL;
- config->budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_CALLOUT;
- config->budget_callout = _POSIX_Threads_Sporadic_budget_callout;
+ config->cpu_budget_operations = &_POSIX_Threads_Sporadic_budget;
return 0;
}
#endif