source: rtems/cpukit/include/rtems/score/priority.h @ 21275b58

Last change on this file since 21275b58 was 2afb22b, checked in by Chris Johns <chrisj@…>, on Dec 23, 2017 at 7:18:56 AM

Remove make preinstall

A speciality of the RTEMS build system was the make preinstall step. It
copied header files from arbitrary locations into the build tree. The
header files were included via the -Bsome/build/tree/path GCC command
line option.

This has at least seven problems:

  • The make preinstall step itself needs time and disk space.
  • Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error.
  • There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult.
  • The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit.
  • An introduction of a new build system is difficult.
  • Include paths specified by the -B option are system headers. This may suppress warnings.
  • The parallel build had sporadic failures on some hosts.

This patch removes the make preinstall step. All installed header
files are moved to dedicated include directories in the source tree.
Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc,
etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g.
erc32, imx, qoriq, etc.

The new cpukit include directories are:

  • cpukit/include
  • cpukit/score/cpu/@RTEMS_CPU@/include
  • cpukit/libnetworking

The new BSP include directories are:

  • bsps/include
  • bsps/@RTEMS_CPU@/include
  • bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include

There are build tree include directories for generated files.

The include directory order favours the most general header file, e.g.
it is not possible to override general header files via the include path
order.

The "bootstrap -p" option was removed. The new "bootstrap -H" option
should be used to regenerate the "headers.am" files.

Update #3254.

  • Property mode set to 100644
File size: 5.3 KB
Line 
1/**
2 * @file
3 *
4 * @brief Priority Handler API
5 */
6
7/*
8 *  COPYRIGHT (c) 1989-2011.
9 *  On-Line Applications Research Corporation (OAR).
10 *
11 *  Copyright (c) 2016, 2017 embedded brains GmbH.
12 *
13 *  The license and distribution terms for this file may be
14 *  found in the file LICENSE in this distribution or at
15 *  http://www.rtems.org/license/LICENSE.
16 */
17
18#ifndef _RTEMS_SCORE_PRIORITY_H
19#define _RTEMS_SCORE_PRIORITY_H
20
21#include <rtems/score/chain.h>
22#include <rtems/score/cpu.h>
23#include <rtems/score/rbtree.h>
24
25struct _Scheduler_Control;
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31/**
32 * @defgroup ScorePriority Priority Handler
33 *
34 * @ingroup Score
35 *
36 * This handler encapsulates functionality which is used to manage thread
37 * priorities.  The actual priority of a thread is an aggregation of priority
38 * nodes.  The thread priority aggregation for the home scheduler instance of a
39 * thread consists of at least one priority node, which is normally the real
40 * priority of the thread.  The locking protocols (e.g. priority ceiling and
41 * priority inheritance), rate-monotonic period objects and the POSIX sporadic
42 * server add, change and remove priority nodes.
43 *
44 * @{
45 */
46
47/**
48 * @brief The thread priority control.
49 *
50 * Lower values represent higher priorities.  So, a priority value of zero
51 * represents the highest priority thread.  This value is reserved for internal
52 * threads and the priority ceiling protocol.
53 *
54 * The format of the thread priority control depends on the context.  A thread
55 * priority control may contain a user visible priority for API import/export.
56 * It may also contain a scheduler internal priority value.  Values are
57 * translated via the scheduler map/unmap priority operations.  The format of
58 * scheduler interal values depend on the particular scheduler implementation.
59 * It may for example encode a deadline in case of the EDF scheduler.
60 *
61 * The thread priority control value contained in the scheduler node
62 * (Scheduler_Node::Priority::value) uses the least-significant bit to indicate
63 * if the thread should be appended or prepended to its priority group, see
64 * SCHEDULER_PRIORITY_APPEND().
65 */
66typedef uint64_t Priority_Control;
67
68/**
69 * @brief The highest (most important) thread priority value.
70 */
71#define PRIORITY_MINIMUM      0
72
73/**
74 * @brief The priority value of pseudo-ISR threads.
75 *
76 * Examples are the MPCI and timer server threads.
77 */
78#define PRIORITY_PSEUDO_ISR   PRIORITY_MINIMUM
79
80/**
81 * @brief The default lowest (least important) thread priority value.
82 *
83 * This value is CPU port dependent.
84 */
85#if defined (CPU_PRIORITY_MAXIMUM)
86  #define PRIORITY_DEFAULT_MAXIMUM      CPU_PRIORITY_MAXIMUM
87#else
88  #define PRIORITY_DEFAULT_MAXIMUM      255
89#endif
90
91/**
92 * @brief The priority node to build up a priority aggregation.
93 */
94typedef struct {
95  /**
96   * @brief Node component for a chain or red-black tree.
97   */
98  union {
99    Chain_Node Chain;
100    RBTree_Node RBTree;
101  } Node;
102
103  /**
104   * @brief The priority value of this node.
105   */
106  Priority_Control priority;
107} Priority_Node;
108
109/**
110 * @brief The priority action type.
111 */
112typedef enum {
113  PRIORITY_ACTION_ADD,
114  PRIORITY_ACTION_CHANGE,
115  PRIORITY_ACTION_REMOVE,
116  PRIORITY_ACTION_INVALID
117} Priority_Action_type;
118
119typedef struct Priority_Aggregation Priority_Aggregation;
120
121/**
122 * @brief The priority aggregation.
123 *
124 * This structure serves two purposes.  Firstly, it provides a place to
125 * register priority nodes and reflects the overall priority of its
126 * contributors.  Secondly, it provides an action block to signal addition,
127 * change and removal of a priority node.
128 */
129struct Priority_Aggregation {
130  /**
131   * @brief This priority node reflects the overall priority of the aggregation.
132   *
133   * The overall priority of the aggregation is the minimum priority of the
134   * priority nodes in the contributors tree.
135   *
136   * This priority node may be used to add this aggregation to another
137   * aggregation to build up a recursive priority scheme.
138   *
139   * In case priority nodes of the contributors tree are added, changed or
140   * removed the priority of this node may change.  To signal such changes to a
141   * priority aggregation the action block may be used.
142   */
143  Priority_Node Node;
144
145  /**
146   * @brief A red-black tree to contain priority nodes contributing to the
147   * overall priority of this priority aggregation.
148   */
149  RBTree_Control Contributors;
150
151#if defined(RTEMS_SMP)
152  /**
153   * @brief The scheduler instance of this priority aggregation.
154   */
155  const struct _Scheduler_Control *scheduler;
156#endif
157
158  /**
159   * @brief A priority action block to manage priority node additions, changes
160   * and removals.
161   */
162  struct {
163#if defined(RTEMS_SMP)
164    /**
165     * @brief The next priority aggregation in the action list.
166     */
167    Priority_Aggregation *next;
168#endif
169
170    /**
171     * @brief The priority node of the action.
172     */
173    Priority_Node *node;
174
175    /**
176     * @brief The type of the action.
177     */
178    Priority_Action_type type;
179  } Action;
180};
181
182/**
183 * @brief A list of priority actions.
184 *
185 * Actions are only added to the list.  The action lists reside on the stack
186 * and have a short life-time.  They are moved, processed or destroyed as a
187 * whole.
188 */
189typedef struct {
190  /**
191   * @brief The first action of a priority action list.
192   */
193  Priority_Aggregation *actions;
194} Priority_Actions;
195
196#ifdef __cplusplus
197}
198#endif
199
200/**@}*/
201
202#endif
203/* end of include file */
Note: See TracBrowser for help on using the repository browser.