summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h')
-rw-r--r--cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h75
1 files changed, 35 insertions, 40 deletions
diff --git a/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h b/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h
index 073a7ade06..17d6e552f3 100644
--- a/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h
+++ b/cpukit/score/include/rtems/score/schedulerprioritysmpimpl.h
@@ -7,7 +7,7 @@
*/
/*
- * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -90,7 +90,7 @@ static inline void _Scheduler_priority_SMP_Move_from_ready_to_scheduled(
{
Scheduler_priority_SMP_Context *self;
Scheduler_priority_SMP_Node *node;
- Priority_Control priority;
+ Priority_Control insert_priority;
self = _Scheduler_priority_SMP_Get_self( context );
node = _Scheduler_priority_SMP_Node_downcast( ready_to_scheduled );
@@ -100,47 +100,41 @@ static inline void _Scheduler_priority_SMP_Move_from_ready_to_scheduled(
&node->Ready_queue,
&self->Bit_map
);
- priority = node->Base.priority;
+ insert_priority = _Scheduler_SMP_Node_priority( &node->Base.Base );
+ insert_priority = SCHEDULER_PRIORITY_APPEND( insert_priority );
_Chain_Insert_ordered_unprotected(
&self->Base.Scheduled,
&node->Base.Base.Node.Chain,
- &priority,
- _Scheduler_SMP_Insert_priority_fifo_order
+ &insert_priority,
+ _Scheduler_SMP_Priority_less_equal
);
}
-static inline void _Scheduler_priority_SMP_Insert_ready_lifo(
+static inline void _Scheduler_priority_SMP_Insert_ready(
Scheduler_Context *context,
- Scheduler_Node *thread
-)
-{
- Scheduler_priority_SMP_Context *self =
- _Scheduler_priority_SMP_Get_self( context );
- Scheduler_priority_SMP_Node *node =
- _Scheduler_priority_SMP_Node_downcast( thread );
-
- _Scheduler_priority_Ready_queue_enqueue(
- &node->Base.Base.Node.Chain,
- &node->Ready_queue,
- &self->Bit_map
- );
-}
-
-static inline void _Scheduler_priority_SMP_Insert_ready_fifo(
- Scheduler_Context *context,
- Scheduler_Node *thread
+ Scheduler_Node *node_base,
+ Priority_Control insert_priority
)
{
- Scheduler_priority_SMP_Context *self =
- _Scheduler_priority_SMP_Get_self( context );
- Scheduler_priority_SMP_Node *node =
- _Scheduler_priority_SMP_Node_downcast( thread );
+ Scheduler_priority_SMP_Context *self;
+ Scheduler_priority_SMP_Node *node;
- _Scheduler_priority_Ready_queue_enqueue_first(
- &node->Base.Base.Node.Chain,
- &node->Ready_queue,
- &self->Bit_map
- );
+ self = _Scheduler_priority_SMP_Get_self( context );
+ node = _Scheduler_priority_SMP_Node_downcast( node_base );
+
+ if ( SCHEDULER_PRIORITY_IS_APPEND( insert_priority ) ) {
+ _Scheduler_priority_Ready_queue_enqueue(
+ &node->Base.Base.Node.Chain,
+ &node->Ready_queue,
+ &self->Bit_map
+ );
+ } else {
+ _Scheduler_priority_Ready_queue_enqueue_first(
+ &node->Base.Base.Node.Chain,
+ &node->Ready_queue,
+ &self->Bit_map
+ );
+ }
}
static inline void _Scheduler_priority_SMP_Extract_from_ready(
@@ -162,19 +156,20 @@ static inline void _Scheduler_priority_SMP_Extract_from_ready(
static inline void _Scheduler_priority_SMP_Do_update(
Scheduler_Context *context,
- Scheduler_Node *node_to_update,
- Priority_Control new_priority
+ Scheduler_Node *node_to_update,
+ Priority_Control new_priority
)
{
- Scheduler_priority_SMP_Context *self =
- _Scheduler_priority_SMP_Get_self( context );
- Scheduler_priority_SMP_Node *node =
- _Scheduler_priority_SMP_Node_downcast( node_to_update );
+ Scheduler_priority_SMP_Context *self;
+ Scheduler_priority_SMP_Node *node;
+
+ self = _Scheduler_priority_SMP_Get_self( context );
+ node = _Scheduler_priority_SMP_Node_downcast( node_to_update );
_Scheduler_SMP_Node_update_priority( &node->Base, new_priority );
_Scheduler_priority_Ready_queue_update(
&node->Ready_queue,
- new_priority,
+ SCHEDULER_PRIORITY_UNMAP( new_priority ),
&self->Bit_map,
&self->Ready[ 0 ]
);