summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-19 11:20:58 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-20 16:11:02 +0200
commit7dfb4b970cbd22cef170b2f45a41f445406a2ce5 (patch)
treed26b77b23f3e95c52b2b89e147b4e2dd557395b7
parentfat: Fix for invalid cluster sizes (diff)
downloadrtems-7dfb4b970cbd22cef170b2f45a41f445406a2ce5.tar.bz2
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.
-rw-r--r--cpukit/posix/include/rtems/posix/priorityimpl.h2
-rw-r--r--cpukit/rtems/include/rtems/rtems/tasks.h1
-rw-r--r--cpukit/sapi/include/confdefs.h13
-rw-r--r--cpukit/sapi/include/rtems/scheduler.h18
-rw-r--r--cpukit/score/include/rtems/score/priority.h8
-rw-r--r--cpukit/score/include/rtems/score/scheduler.h14
-rw-r--r--cpukit/score/include/rtems/score/schedulercbs.h2
-rw-r--r--cpukit/score/include/rtems/score/scheduleredf.h2
-rw-r--r--cpukit/score/include/rtems/score/schedulersimple.h2
-rw-r--r--cpukit/score/include/rtems/score/schedulersimplesmp.h2
10 files changed, 42 insertions, 22 deletions
diff --git a/cpukit/posix/include/rtems/posix/priorityimpl.h b/cpukit/posix/include/rtems/posix/priorityimpl.h
index 169254d22f..3835ee90d0 100644
--- a/cpukit/posix/include/rtems/posix/priorityimpl.h
+++ b/cpukit/posix/include/rtems/posix/priorityimpl.h
@@ -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" {
diff --git a/cpukit/rtems/include/rtems/rtems/tasks.h b/cpukit/rtems/include/rtems/rtems/tasks.h
index 5f33e0b04b..84ea806f81 100644
--- a/cpukit/rtems/include/rtems/rtems/tasks.h
+++ b/cpukit/rtems/include/rtems/rtems/tasks.h
@@ -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>
diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index b7c2f44de7..95f29fdfb9 100644
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.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, \
@@ -3350,18 +3351,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
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.
*/
const rtems_configuration_table Configuration = {
diff --git a/cpukit/sapi/include/rtems/scheduler.h b/cpukit/sapi/include/rtems/scheduler.h
index 39dff903d4..0b20aab55e 100644
--- a/cpukit/sapi/include/rtems/scheduler.h
+++ b/cpukit/sapi/include/rtems/scheduler.h
@@ -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
diff --git a/cpukit/score/include/rtems/score/priority.h b/cpukit/score/include/rtems/score/priority.h
index 0a772f62a2..38f3995e61 100644
--- a/cpukit/score/include/rtems/score/priority.h
+++ b/cpukit/score/include/rtems/score/priority.h
@@ -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
diff --git a/cpukit/score/include/rtems/score/scheduler.h b/cpukit/score/include/rtems/score/scheduler.h
index 5296644aeb..1e6236fa4d 100644
--- a/cpukit/score/include/rtems/score/scheduler.h
+++ b/cpukit/score/include/rtems/score/scheduler.h
@@ -201,6 +201,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.
*/
uint32_t 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
diff --git a/cpukit/score/include/rtems/score/schedulercbs.h b/cpukit/score/include/rtems/score/schedulercbs.h
index 5558d6e919..e390532343 100644
--- a/cpukit/score/include/rtems/score/schedulercbs.h
+++ b/cpukit/score/include/rtems/score/schedulercbs.h
@@ -39,6 +39,8 @@ extern "C" {
*/
/**@{*/
+#define SCHEDULER_CBS_MAXIMUM_PRIORITY SCHEDULER_EDF_MAXIMUM_PRIORITY
+
/**
* Entry points for the Constant Bandwidth Server Scheduler.
*
diff --git a/cpukit/score/include/rtems/score/scheduleredf.h b/cpukit/score/include/rtems/score/scheduleredf.h
index 9b0d1b4099..137ea3abde 100644
--- a/cpukit/score/include/rtems/score/scheduleredf.h
+++ b/cpukit/score/include/rtems/score/scheduleredf.h
@@ -35,6 +35,8 @@ extern "C" {
*/
/**@{*/
+#define SCHEDULER_EDF_MAXIMUM_PRIORITY 255
+
/**
* Entry points for the Earliest Deadline First Scheduler.
*/
diff --git a/cpukit/score/include/rtems/score/schedulersimple.h b/cpukit/score/include/rtems/score/schedulersimple.h
index 201c1b6628..a546ed629f 100644
--- a/cpukit/score/include/rtems/score/schedulersimple.h
+++ b/cpukit/score/include/rtems/score/schedulersimple.h
@@ -32,6 +32,8 @@ extern "C" {
*/
/**@{*/
+#define SCHEDULER_SIMPLE_MAXIMUM_PRIORITY 255
+
/**
* Entry points for Scheduler Simple
*/
diff --git a/cpukit/score/include/rtems/score/schedulersimplesmp.h b/cpukit/score/include/rtems/score/schedulersimplesmp.h
index 11310c6898..342a574174 100644
--- a/cpukit/score/include/rtems/score/schedulersimplesmp.h
+++ b/cpukit/score/include/rtems/score/schedulersimplesmp.h
@@ -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.
*/