mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-08-24 10:24:50 +08:00
score: Add per scheduler instance maximum priority
The priority values are only valid within a scheduler instance. Thus, the maximum priority value must be defined per scheduler instance. The first scheduler instance defines PRIORITY_MAXIMUM. This implies that RTEMS_MAXIMUM_PRIORITY and POSIX_SCHEDULER_MAXIMUM_PRIORITY are only valid for threads of the first scheduler instance. Further API/implementation changes are necessary to fix this. Update #2556.
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
#ifndef _RTEMS_POSIX_PRIORITYIMPL_H
|
||||
#define _RTEMS_POSIX_PRIORITYIMPL_H
|
||||
|
||||
#include <rtems/score/priority.h>
|
||||
#include <rtems/score/scheduler.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#define _RTEMS_RTEMS_TASKS_H
|
||||
|
||||
#include <rtems/score/object.h>
|
||||
#include <rtems/score/scheduler.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/rtems/types.h>
|
||||
#include <rtems/rtems/event.h>
|
||||
|
||||
@@ -883,6 +883,7 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
|
||||
CONFIGURE_MAXIMUM_PRIORITY + 1 \
|
||||
)
|
||||
|
||||
/** Configure the controls for this scheduler instance */
|
||||
#define CONFIGURE_SCHEDULER_CONTROLS \
|
||||
RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP( \
|
||||
dflt, \
|
||||
@@ -3349,18 +3350,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
|
||||
uint32_t rtems_minimum_stack_size =
|
||||
CONFIGURE_MINIMUM_TASK_STACK_SIZE;
|
||||
|
||||
/**
|
||||
* This variable specifies the maximum priority value that
|
||||
* a task may have. This must be a power of 2 between 4
|
||||
* and 256 and is specified in terms of Classic API
|
||||
* priority values.
|
||||
*
|
||||
* NOTE: This is left as a simple uint8_t so it can be externed as
|
||||
* needed without requring being high enough logical to
|
||||
* include the full configuration table.
|
||||
*/
|
||||
uint8_t rtems_maximum_priority = CONFIGURE_MAXIMUM_PRIORITY;
|
||||
|
||||
/**
|
||||
* This is the primary Configuration Table for this application.
|
||||
*/
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2014 embedded brains GmbH. All rights reserved.
|
||||
* Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
@@ -70,6 +70,7 @@
|
||||
{ \
|
||||
&RTEMS_SCHEDULER_CONTEXT_CBS_NAME( name ).Base, \
|
||||
SCHEDULER_CBS_ENTRY_POINTS, \
|
||||
SCHEDULER_CBS_MAXIMUM_PRIORITY, \
|
||||
( obj_name ) \
|
||||
}
|
||||
#endif
|
||||
@@ -87,6 +88,7 @@
|
||||
{ \
|
||||
&RTEMS_SCHEDULER_CONTEXT_EDF_NAME( name ).Base, \
|
||||
SCHEDULER_EDF_ENTRY_POINTS, \
|
||||
SCHEDULER_EDF_MAXIMUM_PRIORITY, \
|
||||
( obj_name ) \
|
||||
}
|
||||
#endif
|
||||
@@ -107,6 +109,9 @@
|
||||
{ \
|
||||
&RTEMS_SCHEDULER_CONTEXT_PRIORITY_NAME( name ).Base.Base, \
|
||||
SCHEDULER_PRIORITY_ENTRY_POINTS, \
|
||||
RTEMS_ARRAY_SIZE( \
|
||||
RTEMS_SCHEDULER_CONTEXT_PRIORITY_NAME( name ).Ready \
|
||||
) - 1, \
|
||||
( obj_name ) \
|
||||
}
|
||||
#endif
|
||||
@@ -127,6 +132,9 @@
|
||||
{ \
|
||||
&RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP_NAME( name ).Base.Base.Base, \
|
||||
SCHEDULER_PRIORITY_AFFINITY_SMP_ENTRY_POINTS, \
|
||||
RTEMS_ARRAY_SIZE( \
|
||||
RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP_NAME( name ).Ready \
|
||||
) - 1, \
|
||||
( obj_name ) \
|
||||
}
|
||||
#endif
|
||||
@@ -147,6 +155,9 @@
|
||||
{ \
|
||||
&RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP_NAME( name ).Base.Base.Base, \
|
||||
SCHEDULER_PRIORITY_SMP_ENTRY_POINTS, \
|
||||
RTEMS_ARRAY_SIZE( \
|
||||
RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP_NAME( name ).Ready \
|
||||
) - 1, \
|
||||
( obj_name ) \
|
||||
}
|
||||
#endif
|
||||
@@ -167,6 +178,9 @@
|
||||
{ \
|
||||
&RTEMS_SCHEDULER_CONTEXT_STRONG_APA_NAME( name ).Base.Base.Base, \
|
||||
SCHEDULER_STRONG_APA_ENTRY_POINTS, \
|
||||
RTEMS_ARRAY_SIZE( \
|
||||
RTEMS_SCHEDULER_CONTEXT_STRONG_APA_NAME( name ).Ready \
|
||||
) - 1, \
|
||||
( obj_name ) \
|
||||
}
|
||||
#endif
|
||||
@@ -185,6 +199,7 @@
|
||||
{ \
|
||||
&RTEMS_SCHEDULER_CONTEXT_SIMPLE_NAME( name ).Base, \
|
||||
SCHEDULER_SIMPLE_ENTRY_POINTS, \
|
||||
SCHEDULER_SIMPLE_MAXIMUM_PRIORITY, \
|
||||
( obj_name ) \
|
||||
}
|
||||
#endif
|
||||
@@ -203,6 +218,7 @@
|
||||
{ \
|
||||
&RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP_NAME( name ).Base.Base, \
|
||||
SCHEDULER_SIMPLE_SMP_ENTRY_POINTS, \
|
||||
SCHEDULER_SIMPLE_SMP_MAXIMUM_PRIORITY, \
|
||||
( obj_name ) \
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -72,14 +72,6 @@ typedef uint32_t Priority_Control;
|
||||
#define PRIORITY_DEFAULT_MAXIMUM 255
|
||||
#endif
|
||||
|
||||
/** This defines the lowest (least important) thread priority. */
|
||||
#define PRIORITY_MAXIMUM rtems_maximum_priority
|
||||
|
||||
/**
|
||||
* This variable contains the configured number of priorities
|
||||
*/
|
||||
extern uint8_t rtems_maximum_priority;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -200,6 +200,14 @@ struct Scheduler_Control {
|
||||
*/
|
||||
Scheduler_Operations Operations;
|
||||
|
||||
/**
|
||||
* @brief The maximum priority value of this scheduler.
|
||||
*
|
||||
* It defines the lowest (least important) thread priority for this
|
||||
* scheduler. For example the idle threads have this priority.
|
||||
*/
|
||||
Priority_Control maximum_priority;
|
||||
|
||||
/**
|
||||
* @brief The scheduler name.
|
||||
*/
|
||||
@@ -555,6 +563,12 @@ void _Scheduler_default_Start_idle(
|
||||
#define SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief This defines the lowest (least important) thread priority of the
|
||||
* first scheduler instance.
|
||||
*/
|
||||
#define PRIORITY_MAXIMUM ( _Scheduler_Table[ 0 ].maximum_priority )
|
||||
|
||||
/**@}*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -39,6 +39,8 @@ extern "C" {
|
||||
*/
|
||||
/**@{*/
|
||||
|
||||
#define SCHEDULER_CBS_MAXIMUM_PRIORITY SCHEDULER_EDF_MAXIMUM_PRIORITY
|
||||
|
||||
/**
|
||||
* Entry points for the Constant Bandwidth Server Scheduler.
|
||||
*
|
||||
|
||||
@@ -35,6 +35,8 @@ extern "C" {
|
||||
*/
|
||||
/**@{*/
|
||||
|
||||
#define SCHEDULER_EDF_MAXIMUM_PRIORITY 255
|
||||
|
||||
/**
|
||||
* Entry points for the Earliest Deadline First Scheduler.
|
||||
*/
|
||||
|
||||
@@ -32,6 +32,8 @@ extern "C" {
|
||||
*/
|
||||
/**@{*/
|
||||
|
||||
#define SCHEDULER_SIMPLE_MAXIMUM_PRIORITY 255
|
||||
|
||||
/**
|
||||
* Entry points for Scheduler Simple
|
||||
*/
|
||||
|
||||
@@ -54,6 +54,8 @@ typedef struct {
|
||||
Chain_Control Ready;
|
||||
} Scheduler_simple_SMP_Context;
|
||||
|
||||
#define SCHEDULER_SIMPLE_SMP_MAXIMUM_PRIORITY 255
|
||||
|
||||
/**
|
||||
* @brief Entry points for the Simple SMP Scheduler.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user