source: rtems/cpukit/posix/src/psxtransschedparam.c @ 0e16fa45

5
Last change on this file since 0e16fa45 was 54f35888, checked in by Sebastian Huber <sebastian.huber@…>, on 10/25/18 at 08:54:12

posix: Provide threads by default

Update #2514.

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/**
2 * @file
3 *
4 * @brief Translate sched_param into SuperCore Terms
5 * @ingroup POSIX_PTHREAD Private POSIX Threads
6 */
7
8/*
9 *  COPYRIGHT (c) 1989-2009.
10 *  On-Line Applications Research Corporation (OAR).
11 *
12 *  The license and distribution terms for this file may be
13 *  found in the file LICENSE in this distribution or at
14 *  http://www.rtems.org/license/LICENSE.
15 */
16
17#if HAVE_CONFIG_H
18#include "config.h"
19#endif
20
21#include <pthread.h>
22#include <errno.h>
23
24#include <rtems/posix/pthreadimpl.h>
25
26int _POSIX_Thread_Translate_to_sched_policy(
27  Thread_CPU_budget_algorithms budget_algorithm
28)
29{
30  switch ( budget_algorithm ) {
31    case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE:
32      return SCHED_OTHER;
33    case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
34      return SCHED_RR;
35    case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
36      return SCHED_SPORADIC;
37    default:
38      _Assert( budget_algorithm == THREAD_CPU_BUDGET_ALGORITHM_NONE );
39      return SCHED_FIFO;
40  }
41}
42
43int _POSIX_Thread_Translate_sched_param(
44  int                                  policy,
45  const struct sched_param            *param,
46  Thread_CPU_budget_algorithms        *budget_algorithm,
47  Thread_CPU_budget_algorithm_callout *budget_callout
48)
49{
50  *budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
51  *budget_callout = NULL;
52
53  if ( policy == SCHED_OTHER ) {
54    *budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE;
55    return 0;
56  }
57
58  if ( policy == SCHED_FIFO ) {
59    *budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
60    return 0;
61  }
62
63  if ( policy == SCHED_RR ) {
64    *budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE;
65    return 0;
66  }
67
68#if defined(RTEMS_POSIX_API)
69  if ( policy == SCHED_SPORADIC ) {
70    if ( (param->sched_ss_repl_period.tv_sec == 0) &&
71         (param->sched_ss_repl_period.tv_nsec == 0) )
72      return EINVAL;
73
74    if ( (param->sched_ss_init_budget.tv_sec == 0) &&
75         (param->sched_ss_init_budget.tv_nsec == 0) )
76      return EINVAL;
77
78    if ( _Timespec_To_ticks( &param->sched_ss_repl_period ) <
79         _Timespec_To_ticks( &param->sched_ss_init_budget ) )
80      return EINVAL;
81
82    *budget_algorithm  = THREAD_CPU_BUDGET_ALGORITHM_CALLOUT;
83    *budget_callout = _POSIX_Threads_Sporadic_budget_callout;
84    return 0;
85  }
86#endif
87
88  return EINVAL;
89}
Note: See TracBrowser for help on using the repository browser.