summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cpukit/score/include/rtems/score/schedulersmpimpl.h11
-rw-r--r--cpukit/score/src/scheduleredfsmp.c5
-rw-r--r--cpukit/score/src/schedulerpriorityaffinitysmp.c30
3 files changed, 18 insertions, 28 deletions
diff --git a/cpukit/score/include/rtems/score/schedulersmpimpl.h b/cpukit/score/include/rtems/score/schedulersmpimpl.h
index 3afa6b2a0c..3194ee39a0 100644
--- a/cpukit/score/include/rtems/score/schedulersmpimpl.h
+++ b/cpukit/score/include/rtems/score/schedulersmpimpl.h
@@ -286,8 +286,7 @@ typedef Scheduler_Node *( *Scheduler_SMP_Get_highest_ready )(
typedef Scheduler_Node *( *Scheduler_SMP_Get_lowest_scheduled )(
Scheduler_Context *context,
- Scheduler_Node *filter,
- Chain_Node_order order
+ Scheduler_Node *filter
);
typedef void ( *Scheduler_SMP_Extract )(
@@ -615,8 +614,7 @@ static inline Thread_Control *_Scheduler_SMP_Preempt(
static inline Scheduler_Node *_Scheduler_SMP_Get_lowest_scheduled(
Scheduler_Context *context,
- Scheduler_Node *filter,
- Chain_Node_order order
+ Scheduler_Node *filter
)
{
Scheduler_SMP_Context *self = _Scheduler_SMP_Get_self( context );
@@ -625,7 +623,6 @@ static inline Scheduler_Node *_Scheduler_SMP_Get_lowest_scheduled(
(Scheduler_Node *) _Chain_Last( scheduled );
(void) filter;
- (void) order;
_Assert( &lowest_scheduled->Node.Chain != _Chain_Tail( scheduled ) );
_Assert(
@@ -725,7 +722,7 @@ static inline bool _Scheduler_SMP_Enqueue_ordered(
bool needs_help;
Scheduler_Node *lowest_scheduled;
- lowest_scheduled = ( *get_lowest_scheduled )( context, node, order );
+ lowest_scheduled = ( *get_lowest_scheduled )( context, node );
if ( ( *order )( &node->Node.Chain, &lowest_scheduled->Node.Chain ) ) {
_Scheduler_SMP_Enqueue_to_scheduled(
@@ -1207,7 +1204,7 @@ static inline bool _Scheduler_SMP_Ask_for_help(
ISR_lock_Context lock_context;
bool success;
- lowest_scheduled = ( *get_lowest_scheduled )( context, node, order );
+ lowest_scheduled = ( *get_lowest_scheduled )( context, node );
_Thread_Scheduler_acquire_critical( thread, &lock_context );
diff --git a/cpukit/score/src/scheduleredfsmp.c b/cpukit/score/src/scheduleredfsmp.c
index bd6ce82068..3a1b1a934e 100644
--- a/cpukit/score/src/scheduleredfsmp.c
+++ b/cpukit/score/src/scheduleredfsmp.c
@@ -226,8 +226,7 @@ static inline Scheduler_EDF_SMP_Node *_Scheduler_EDF_SMP_Get_scheduled(
static inline Scheduler_Node *_Scheduler_EDF_SMP_Get_lowest_scheduled(
Scheduler_Context *context,
- Scheduler_Node *filter_base,
- Chain_Node_order order
+ Scheduler_Node *filter_base
)
{
Scheduler_EDF_SMP_Node *filter;
@@ -249,7 +248,7 @@ static inline Scheduler_Node *_Scheduler_EDF_SMP_Get_lowest_scheduled(
}
}
- return _Scheduler_SMP_Get_lowest_scheduled( context, filter_base, order );
+ return _Scheduler_SMP_Get_lowest_scheduled( context, filter_base );
}
static inline void _Scheduler_EDF_SMP_Insert_ready(
diff --git a/cpukit/score/src/schedulerpriorityaffinitysmp.c b/cpukit/score/src/schedulerpriorityaffinitysmp.c
index 03db3e9a26..6caf00c3a0 100644
--- a/cpukit/score/src/schedulerpriorityaffinitysmp.c
+++ b/cpukit/score/src/schedulerpriorityaffinitysmp.c
@@ -210,8 +210,7 @@ void _Scheduler_priority_affinity_SMP_Block(
*/
static Scheduler_Node * _Scheduler_priority_affinity_SMP_Get_lowest_scheduled(
Scheduler_Context *context,
- Scheduler_Node *filter_base,
- Chain_Node_order order
+ Scheduler_Node *filter_base
)
{
Scheduler_SMP_Context *self = _Scheduler_SMP_Get_self( context );
@@ -230,20 +229,6 @@ static Scheduler_Node * _Scheduler_priority_affinity_SMP_Get_lowest_scheduled(
node = (Scheduler_priority_affinity_SMP_Node *) chain_node;
- /*
- * If we didn't find a thread which is of equal or lower importance
- * than filter thread is, then we can't schedule the filter thread
- * to execute.
- */
- if (
- (*order)(
- &node->Base.Base.Base.Node.Chain,
- &filter->Base.Base.Base.Node.Chain
- )
- ) {
- break;
- }
-
/* cpu_index is the processor number thread is executing on */
thread = _Scheduler_Node_get_owner( &node->Base.Base.Base );
cpu_index = _Per_CPU_Get_index( _Thread_Get_CPU( thread ) );
@@ -309,8 +294,7 @@ static void _Scheduler_priority_affinity_SMP_Check_for_migrations(
lowest_scheduled =
_Scheduler_priority_affinity_SMP_Get_lowest_scheduled(
context,
- highest_ready,
- _Scheduler_SMP_Insert_priority_lifo_order
+ highest_ready
);
/*
@@ -322,9 +306,19 @@ static void _Scheduler_priority_affinity_SMP_Check_for_migrations(
* considering affinity. But now we have to consider that thread's
* affinity as we look to place it.
*/
+
if ( lowest_scheduled == NULL )
break;
+ if (
+ _Scheduler_SMP_Insert_priority_lifo_order(
+ &lowest_scheduled->Node.Chain,
+ &highest_ready->Node.Chain
+ )
+ ) {
+ break;
+ }
+
/*
* But if we found a thread which is lower priority than one
* in the ready set, then we need to swap them out.