source: rtems/cpukit/posix/include/rtems/posix/priorityimpl.h @ 254dc82

5
Last change on this file since 254dc82 was 254dc82, checked in by Sebastian Huber <sebastian.huber@…>, on 06/24/16 at 09:22:03

score: Change Priority_Control to 64-bit

A 32-bit Priority_Control limits the uptime to 49 days with a 1ms clock
tick in case the EDF scheduler is used. Increase it to 64-bit to enable
proper operation of the EDF scheduler,

Close 2173.

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/**
2 * @file
3 *
4 * @brief POSIX Priority Support
5 *
6 * This include file defines the interface to the POSIX priority
7 * implementation.
8 */
9
10/*
11 *  COPYRIGHT (c) 1989-2011.
12 *  On-Line Applications Research Corporation (OAR).
13 *
14 *  The license and distribution terms for this file may be
15 *  found in the file LICENSE in this distribution or at
16 *  http://www.rtems.org/license/LICENSE.
17 */
18
19#ifndef _RTEMS_POSIX_PRIORITYIMPL_H
20#define _RTEMS_POSIX_PRIORITYIMPL_H
21
22#include <rtems/score/scheduler.h>
23#include <rtems/score/assert.h>
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29/**
30 * @defgroup POSIX_PRIORITY POSIX Priority Support
31 *
32 * @ingroup POSIXAPI
33 *
34 * @brief Interface to the POSIX Priority Implementation.
35 *
36 * @{
37 */
38
39/**
40 *  This is the numerically least important POSIX priority.
41 */
42#define POSIX_SCHEDULER_MINIMUM_PRIORITY (1)
43
44/**
45 * @brief Gets the maximum POSIX API priority for this scheduler instance.
46 *
47 * Such a priority is valid.  A scheduler instance may support priority values
48 * that are not representable as an integer.
49 *
50 * @return The maximum POSIX API priority for this scheduler instance.
51 */
52RTEMS_INLINE_ROUTINE int _POSIX_Priority_Get_maximum(
53  const Scheduler_Control *scheduler
54)
55{
56  _Assert( (int) scheduler->maximum_priority > 1 );
57  return (int) scheduler->maximum_priority - 1;
58}
59
60/**
61 * @brief Converts the POSIX API priority to the corresponding SuperCore
62 * priority and validates it.
63 *
64 * According to POSIX, numerically higher values represent higher priorities.
65 * Thus, SuperCore has priorities run in the opposite sense of the POSIX API.
66 *
67 * Let N be the maximum priority of this scheduler instance.   The SuperCore
68 * priority zero is system reserved (PRIORITY_PSEUDO_ISR).  There are only
69 * N - 1 POSIX API priority levels since a thread at SuperCore priority N would
70 * never run because of the idle threads.  This is necessary because GNAT maps
71 * the lowest Ada task priority to the lowest thread priority.  The lowest
72 * priority Ada task should get to run, so there is a fundamental conflict with
73 * having N priorities.
74 *
75 * @param[in] scheduler The scheduler instance.
76 * @param[in] priority The POSIX API priority to convert and validate.
77 * @param[out] valid Indicates if the POSIX API priority is valid and a
78 *   corresponding SuperCore priority in the specified scheduler instance
79 *   exists.
80 *
81 * @return The corresponding SuperCore priority.
82 */
83Priority_Control _POSIX_Priority_To_core(
84  const Scheduler_Control *scheduler,
85  int                      priority,
86  bool                    *valid
87);
88
89/**
90 * @brief Converts the SuperCore priority to the corresponding POSIX API
91 * priority.
92 *
93 * @param[in] scheduler The scheduler instance.
94 * @param[in] priority The SuperCore priority to convert.
95 *
96 * @return The corresponding POSIX API priority.
97 */
98int _POSIX_Priority_From_core(
99  const Scheduler_Control *scheduler,
100  Priority_Control         priority
101);
102
103/** @} */
104
105#ifdef __cplusplus
106}
107#endif
108
109#endif
Note: See TracBrowser for help on using the repository browser.