score: Delete unused scheduler ask for help X op

This commit is contained in:
Sebastian Huber
2016-11-02 10:05:44 +01:00
parent 9c238e1bd4
commit 0e754facf4
12 changed files with 1 additions and 356 deletions
+1 -40
View File
@@ -148,29 +148,6 @@ typedef struct {
Scheduler_Node *node,
Thread_Scheduler_state next_state
);
/**
* Ask for help operation.
*
* @param[in] scheduler The scheduler of the thread offering help.
* @param[in] offers_help The thread offering help.
* @param[in] needs_help The thread needing help.
*
* @retval needs_help It was not possible to schedule the thread needing
* help, so it is returned to continue the search for help.
* @retval next_needs_help It was possible to schedule the thread needing
* help, but this displaced another thread eligible to ask for help. So
* this thread is returned to start a new search for help.
* @retval NULL It was possible to schedule the thread needing help, and no
* other thread needs help as a result.
*
* @see _Scheduler_Ask_for_help_X().
*/
Thread_Control *( *ask_for_help_X )(
const Scheduler_Control *scheduler,
Thread_Control *offers_help,
Thread_Control *needs_help
);
#endif
/** @see _Scheduler_Node_initialize() */
@@ -412,26 +389,10 @@ Priority_Control _Scheduler_default_Map_priority(
Thread_Scheduler_state next_state
);
/**
* @brief Does nothing.
*
* @param[in] scheduler Unused.
* @param[in] offers_help Unused.
* @param[in] needs_help Unused.
*
* @retval NULL Always.
*/
Thread_Control *_Scheduler_default_Ask_for_help_X(
const Scheduler_Control *scheduler,
Thread_Control *offers_help,
Thread_Control *needs_help
);
#define SCHEDULER_OPERATION_DEFAULT_ASK_FOR_HELP \
_Scheduler_default_Ask_for_help, \
_Scheduler_default_Reconsider_help_request, \
_Scheduler_default_Withdraw_node, \
_Scheduler_default_Ask_for_help_X,
_Scheduler_default_Withdraw_node,
#else
#define SCHEDULER_OPERATION_DEFAULT_ASK_FOR_HELP
#endif
@@ -1297,158 +1297,6 @@ RTEMS_INLINE_ROUTINE bool _Scheduler_Unblock_node(
return unblock;
}
/**
* @brief Asks a ready scheduler node for help.
*
* @param[in] node The ready node offering help.
* @param[in] needs_help The thread needing help.
*
* @retval needs_help The thread needing help.
*/
RTEMS_INLINE_ROUTINE Thread_Control *_Scheduler_Ask_ready_node_for_help(
Scheduler_Node *node,
Thread_Control *needs_help
)
{
_Scheduler_Node_set_user( node, needs_help );
return needs_help;
}
/**
* @brief Asks a scheduled scheduler node for help.
*
* @param[in] context The scheduler instance context.
* @param[in] node The scheduled node offering help.
* @param[in] offers_help The thread offering help.
* @param[in] needs_help The thread needing help.
* @param[in] previous_accepts_help The previous thread accepting help by this
* scheduler node.
* @param[in] release_idle_thread Function to release an idle thread.
*
* @retval needs_help The previous thread accepting help by this scheduler node
* which was displaced by the thread needing help.
* @retval NULL There are no more threads needing help.
*/
RTEMS_INLINE_ROUTINE Thread_Control *_Scheduler_Ask_scheduled_node_for_help(
Scheduler_Context *context,
Scheduler_Node *node,
Thread_Control *offers_help,
Thread_Control *needs_help,
Thread_Control *previous_accepts_help,
Scheduler_Release_idle_thread release_idle_thread
)
{
Thread_Control *next_needs_help = NULL;
Thread_Control *old_user = NULL;
Thread_Control *new_user = NULL;
if (
previous_accepts_help != needs_help
&& _Scheduler_Thread_get_node( previous_accepts_help ) == node
) {
Thread_Control *idle = _Scheduler_Release_idle_thread(
context,
node,
release_idle_thread
);
if ( idle != NULL ) {
old_user = idle;
} else {
_Assert( _Scheduler_Node_get_user( node ) == previous_accepts_help );
old_user = previous_accepts_help;
}
if ( needs_help->Scheduler.state == THREAD_SCHEDULER_READY ) {
new_user = needs_help;
} else {
_Assert(
node->help_state == SCHEDULER_HELP_ACTIVE_OWNER
|| node->help_state == SCHEDULER_HELP_ACTIVE_RIVAL
);
_Assert( offers_help->Scheduler.node == offers_help->Scheduler.own_node );
new_user = offers_help;
}
if ( previous_accepts_help != offers_help ) {
next_needs_help = previous_accepts_help;
}
} else if ( needs_help->Scheduler.state == THREAD_SCHEDULER_READY ) {
Thread_Control *idle = _Scheduler_Release_idle_thread(
context,
node,
release_idle_thread
);
if ( idle != NULL ) {
old_user = idle;
} else {
old_user = _Scheduler_Node_get_user( node );
}
new_user = needs_help;
} else {
_Assert( needs_help->Scheduler.state == THREAD_SCHEDULER_SCHEDULED );
}
if ( new_user != old_user ) {
Per_CPU_Control *cpu_self = _Per_CPU_Get();
Per_CPU_Control *cpu = _Thread_Get_CPU( old_user );
_Scheduler_Thread_change_state( old_user, THREAD_SCHEDULER_READY );
_Scheduler_Thread_set_scheduler_and_node(
old_user,
_Thread_Scheduler_get_own_node( old_user ),
old_user
);
_Scheduler_Thread_change_state( new_user, THREAD_SCHEDULER_SCHEDULED );
_Scheduler_Thread_set_scheduler_and_node( new_user, node, offers_help );
_Scheduler_Node_set_user( node, new_user );
_Thread_Set_CPU( new_user, cpu );
_Thread_Dispatch_update_heir( cpu_self, cpu, new_user );
}
return next_needs_help;
}
/**
* @brief Asks a blocked scheduler node for help.
*
* @param[in] context The scheduler instance context.
* @param[in] node The scheduled node offering help.
* @param[in] offers_help The thread offering help.
* @param[in] needs_help The thread needing help.
*
* @retval true Enqueue this scheduler node.
* @retval false Otherwise.
*/
RTEMS_INLINE_ROUTINE bool _Scheduler_Ask_blocked_node_for_help(
Scheduler_Context *context,
Scheduler_Node *node,
Thread_Control *offers_help,
Thread_Control *needs_help
)
{
bool enqueue;
_Assert( node->help_state == SCHEDULER_HELP_PASSIVE );
if ( needs_help->Scheduler.state == THREAD_SCHEDULER_READY ) {
_Scheduler_Node_set_user( node, needs_help );
_Scheduler_Thread_set_scheduler_and_node( needs_help, node, offers_help );
enqueue = true;
} else {
enqueue = false;
}
return enqueue;
}
#endif
RTEMS_INLINE_ROUTINE void _Scheduler_Update_heir(
@@ -60,7 +60,6 @@ extern "C" {
_Scheduler_priority_affinity_SMP_Ask_for_help, \
_Scheduler_priority_affinity_SMP_Reconsider_help_request, \
_Scheduler_priority_affinity_SMP_Withdraw_node, \
_Scheduler_priority_affinity_SMP_Ask_for_help_X, \
_Scheduler_priority_affinity_SMP_Node_initialize, \
_Scheduler_default_Node_destroy, \
_Scheduler_default_Release_job, \
@@ -144,12 +143,6 @@ void _Scheduler_priority_affinity_SMP_Withdraw_node(
Thread_Scheduler_state next_state
);
Thread_Control *_Scheduler_priority_affinity_SMP_Ask_for_help_X(
const Scheduler_Control *scheduler,
Thread_Control *offers_help,
Thread_Control *needs_help
);
/**
* @brief Set affinity for the priority affinity SMP scheduler.
*
@@ -89,7 +89,6 @@ typedef struct {
_Scheduler_priority_SMP_Ask_for_help, \
_Scheduler_priority_SMP_Reconsider_help_request, \
_Scheduler_priority_SMP_Withdraw_node, \
_Scheduler_priority_SMP_Ask_for_help_X, \
_Scheduler_priority_SMP_Node_initialize, \
_Scheduler_default_Node_destroy, \
_Scheduler_default_Release_job, \
@@ -145,12 +144,6 @@ void _Scheduler_priority_SMP_Withdraw_node(
Thread_Scheduler_state next_state
);
Thread_Control *_Scheduler_priority_SMP_Ask_for_help_X(
const Scheduler_Control *scheduler,
Thread_Control *needs_help,
Thread_Control *offers_help
);
Thread_Control *_Scheduler_priority_SMP_Yield(
const Scheduler_Control *scheduler,
Thread_Control *thread,
@@ -72,7 +72,6 @@ typedef struct {
_Scheduler_simple_SMP_Ask_for_help, \
_Scheduler_simple_SMP_Reconsider_help_request, \
_Scheduler_simple_SMP_Withdraw_node, \
_Scheduler_simple_SMP_Ask_for_help_X, \
_Scheduler_simple_SMP_Node_initialize, \
_Scheduler_default_Node_destroy, \
_Scheduler_default_Release_job, \
@@ -128,12 +127,6 @@ void _Scheduler_simple_SMP_Withdraw_node(
Thread_Scheduler_state next_state
);
Thread_Control *_Scheduler_simple_SMP_Ask_for_help_X(
const Scheduler_Control *scheduler,
Thread_Control *offers_help,
Thread_Control *needs_help
);
Thread_Control *_Scheduler_simple_SMP_Yield(
const Scheduler_Control *scheduler,
Thread_Control *thread,
@@ -1069,61 +1069,6 @@ static inline void _Scheduler_SMP_Update_priority(
}
}
static inline Thread_Control *_Scheduler_SMP_Ask_for_help_X(
Scheduler_Context *context,
Thread_Control *offers_help,
Thread_Control *needs_help,
Scheduler_SMP_Enqueue enqueue_fifo
)
{
Scheduler_SMP_Node *node = _Scheduler_SMP_Thread_get_own_node( offers_help );
Thread_Control *next_needs_help = NULL;
Thread_Control *previous_accepts_help;
previous_accepts_help = node->Base.accepts_help;
node->Base.accepts_help = needs_help;
switch ( node->state ) {
case SCHEDULER_SMP_NODE_READY:
next_needs_help =
_Scheduler_Ask_ready_node_for_help( &node->Base, needs_help );
break;
case SCHEDULER_SMP_NODE_SCHEDULED:
next_needs_help = _Scheduler_Ask_scheduled_node_for_help(
context,
&node->Base,
offers_help,
needs_help,
previous_accepts_help,
_Scheduler_SMP_Release_idle_thread
);
break;
case SCHEDULER_SMP_NODE_BLOCKED:
if (
_Scheduler_Ask_blocked_node_for_help(
context,
&node->Base,
offers_help,
needs_help
)
) {
_Scheduler_SMP_Node_change_state(
&node->Base,
SCHEDULER_SMP_NODE_READY
);
next_needs_help = ( *enqueue_fifo )(
context,
&node->Base,
needs_help
);
}
break;
}
return next_needs_help;
}
static inline Thread_Control *_Scheduler_SMP_Yield(
Scheduler_Context *context,
Thread_Control *thread,
@@ -89,7 +89,6 @@ typedef struct {
_Scheduler_strong_APA_Ask_for_help, \
_Scheduler_strong_APA_Reconsider_help_request, \
_Scheduler_strong_APA_Withdraw_node, \
_Scheduler_strong_APA_Ask_for_help_X, \
_Scheduler_strong_APA_Node_initialize, \
_Scheduler_default_Node_destroy, \
_Scheduler_default_Release_job, \
@@ -145,12 +144,6 @@ void _Scheduler_strong_APA_Withdraw_node(
Thread_Scheduler_state next_state
);
Thread_Control *_Scheduler_strong_APA_Ask_for_help_X(
const Scheduler_Control *scheduler,
Thread_Control *needs_help,
Thread_Control *offers_help
);
Thread_Control *_Scheduler_strong_APA_Yield(
const Scheduler_Control *scheduler,
Thread_Control *the_thread,
@@ -48,16 +48,3 @@ void _Scheduler_default_Withdraw_node(
(void) node;
(void) next_state;
}
Thread_Control *_Scheduler_default_Ask_for_help_X(
const Scheduler_Control *scheduler,
Thread_Control *offers_help,
Thread_Control *needs_help
)
{
(void) scheduler;
(void) offers_help;
(void) needs_help;
return NULL;
}
@@ -593,26 +593,6 @@ void _Scheduler_priority_affinity_SMP_Withdraw_node(
);
}
Thread_Control *_Scheduler_priority_affinity_SMP_Ask_for_help_X(
const Scheduler_Control *scheduler,
Thread_Control *offers_help,
Thread_Control *needs_help
)
{
Scheduler_Context *context = _Scheduler_Get_context( scheduler );
needs_help = _Scheduler_SMP_Ask_for_help_X(
context,
offers_help,
needs_help,
_Scheduler_priority_affinity_SMP_Enqueue_fifo
);
_Scheduler_priority_affinity_SMP_Check_for_migrations( context );
return needs_help;
}
/*
* This is the public scheduler specific Change Priority operation.
*/
-16
View File
@@ -318,22 +318,6 @@ void _Scheduler_priority_SMP_Withdraw_node(
);
}
Thread_Control *_Scheduler_priority_SMP_Ask_for_help_X(
const Scheduler_Control *scheduler,
Thread_Control *offers_help,
Thread_Control *needs_help
)
{
Scheduler_Context *context = _Scheduler_Get_context( scheduler );
return _Scheduler_SMP_Ask_for_help_X(
context,
offers_help,
needs_help,
_Scheduler_priority_SMP_Enqueue_fifo
);
}
Thread_Control *_Scheduler_priority_SMP_Yield(
const Scheduler_Control *scheduler,
Thread_Control *thread,
-16
View File
@@ -385,22 +385,6 @@ void _Scheduler_simple_SMP_Withdraw_node(
);
}
Thread_Control *_Scheduler_simple_SMP_Ask_for_help_X(
const Scheduler_Control *scheduler,
Thread_Control *offers_help,
Thread_Control *needs_help
)
{
Scheduler_Context *context = _Scheduler_Get_context( scheduler );
return _Scheduler_SMP_Ask_for_help_X(
context,
offers_help,
needs_help,
_Scheduler_simple_SMP_Enqueue_fifo
);
}
Thread_Control *_Scheduler_simple_SMP_Yield(
const Scheduler_Control *scheduler,
Thread_Control *thread,
-16
View File
@@ -444,22 +444,6 @@ void _Scheduler_strong_APA_Withdraw_node(
);
}
Thread_Control *_Scheduler_strong_APA_Ask_for_help_X(
const Scheduler_Control *scheduler,
Thread_Control *offers_help,
Thread_Control *needs_help
)
{
Scheduler_Context *context = _Scheduler_Get_context( scheduler );
return _Scheduler_SMP_Ask_for_help_X(
context,
offers_help,
needs_help,
_Scheduler_strong_APA_Enqueue_fifo
);
}
Thread_Control *_Scheduler_strong_APA_Yield(
const Scheduler_Control *scheduler,
Thread_Control *the_thread,