Delete Thread_Control::Resource_node. Update #2556. --- cpukit/score/include/rtems/score/schedulerimpl.h | 100 +---------------------- cpukit/score/include/rtems/score/thread.h | 8 -- cpukit/score/include/rtems/score/threadimpl.h | 13 +-- cpukit/score/src/threadinitialize.c | 2 - 4 files changed, 2 insertions(+), 121 deletions(-)
diff --git a/cpukit/score/include/rtems/score/schedulerimpl.h b/cpukit/score/include/rtems/score/schedulerimpl.h index b179f67..74cfb58 100644 --- a/cpukit/score/include/rtems/score/schedulerimpl.h +++ b/cpukit/score/include/rtems/score/schedulerimpl.h @@ -196,100 +196,6 @@ RTEMS_INLINE_ROUTINE void _Scheduler_Schedule( Thread_Control *the_thread ) _Scheduler_Release_critical( scheduler, &lock_context ); } -#if defined(RTEMS_SMP) -typedef struct { - Thread_Control *needs_help; - Thread_Control *next_needs_help; -} Scheduler_Ask_for_help_context ; - -RTEMS_INLINE_ROUTINE bool _Scheduler_Ask_for_help_visitor( - Resource_Node *resource_node, - void *arg -) -{ - bool done; - Scheduler_Ask_for_help_context *help_context = arg; - Thread_Control *previous_needs_help = help_context->needs_help; - Thread_Control *next_needs_help; - Thread_Control *offers_help = - THREAD_RESOURCE_NODE_TO_THREAD( resource_node ); - const Scheduler_Control *scheduler = _Scheduler_Get_own( offers_help ); - - next_needs_help = ( *scheduler->Operations.ask_for_help_X )( - scheduler, - offers_help, - previous_needs_help - ); - - done = next_needs_help != previous_needs_help; - - if ( done ) { - help_context->next_needs_help = next_needs_help; - } - - return done; -} - -/** - * @brief Ask threads depending on resources owned by the thread for help. - * - * A thread is in need for help if it lost its assigned processor due to - * pre-emption by a higher priority thread or it was not possible to assign it - * a processor since its priority is to low on its current scheduler instance. - * - * The run-time of this function depends on the size of the resource tree of - * the thread needing help and other resource trees in case threads in need for - * help are produced during this operation. - * - * @param[in] needs_help The thread needing help. - */ -RTEMS_INLINE_ROUTINE void _Scheduler_Ask_for_help_X( - Thread_Control *needs_help -) -{ - do { - const Scheduler_Control *scheduler = _Scheduler_Get_own( needs_help ); - - needs_help = ( *scheduler->Operations.ask_for_help_X )( - scheduler, - needs_help, - needs_help - ); - - if ( needs_help != NULL ) { - Scheduler_Ask_for_help_context help_context = { needs_help, NULL }; - - _Resource_Iterate( - &needs_help->Resource_node, - _Scheduler_Ask_for_help_visitor, - &help_context - ); - - needs_help = help_context.next_needs_help; - } - } while ( needs_help != NULL ); -} - -RTEMS_INLINE_ROUTINE void _Scheduler_Ask_for_help_if_necessary( - Thread_Control *needs_help -) -{ - if ( - needs_help != NULL - && _Resource_Node_owns_resources( &needs_help->Resource_node ) - ) { - Scheduler_Node *node = _Thread_Scheduler_get_own_node( needs_help ); - - if ( - node->help_state != SCHEDULER_HELP_ACTIVE_RIVAL - || _Scheduler_Node_get_user( node ) != needs_help - ) { - _Scheduler_Ask_for_help_X( needs_help ); - } - } -} -#endif - /** * @brief Scheduler yield with a particular thread. * @@ -320,7 +226,6 @@ RTEMS_INLINE_ROUTINE void _Scheduler_Yield( Thread_Control *the_thread ) the_thread, _Thread_Scheduler_get_home_node( the_thread ) ); - _Scheduler_Ask_for_help_if_necessary( needs_help ); _Scheduler_Release_critical( scheduler, &lock_context ); if ( needs_help != the_thread ) { @@ -455,7 +360,6 @@ RTEMS_INLINE_ROUTINE void _Scheduler_Unblock( Thread_Control *the_thread ) the_thread, scheduler_node ); - _Scheduler_Ask_for_help_if_necessary( needs_help ); _Scheduler_Release_critical( scheduler, &lock_context ); if ( needs_help != the_thread ) { @@ -525,18 +429,16 @@ RTEMS_INLINE_ROUTINE void _Scheduler_Update_priority( Thread_Control *the_thread Scheduler_Node *scheduler_node; const Scheduler_Control *scheduler; ISR_lock_Context lock_context; - Thread_Control *needs_help; scheduler_node = SCHEDULER_NODE_OF_THREAD_SCHEDULER_NODE( node ); scheduler = _Scheduler_Node_get_scheduler( scheduler_node ); _Scheduler_Acquire_critical( scheduler, &lock_context ); - needs_help = ( *scheduler->Operations.update_priority )( + ( *scheduler->Operations.update_priority )( scheduler, the_thread, scheduler_node ); - _Scheduler_Ask_for_help_if_necessary( needs_help ); _Scheduler_Release_critical( scheduler, &lock_context ); node = _Chain_Next( node ); diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h index 4815adc..450ca80 100644 --- a/cpukit/score/include/rtems/score/thread.h +++ b/cpukit/score/include/rtems/score/thread.h @@ -29,7 +29,6 @@ #include <rtems/score/isrlock.h> #include <rtems/score/object.h> #include <rtems/score/priority.h> -#include <rtems/score/resource.h> #include <rtems/score/schedulernode.h> #include <rtems/score/stack.h> #include <rtems/score/states.h> @@ -769,13 +768,6 @@ struct _Thread_Control { SMP_lock_Stats Potpourri_stats; #endif -#if defined(RTEMS_SMP) - /** - * @brief Resource node to build a dependency tree in case this thread owns - * resources or depends on a resource. - */ - Resource_Node Resource_node; -#endif #if defined(RTEMS_MULTIPROCESSING) /** This field is true if the thread is offered globally */ bool is_global; diff --git a/cpukit/score/include/rtems/score/threadimpl.h b/cpukit/score/include/rtems/score/threadimpl.h index 79239db..ccfb6bf 100644 --- a/cpukit/score/include/rtems/score/threadimpl.h +++ b/cpukit/score/include/rtems/score/threadimpl.h @@ -27,7 +27,6 @@ #include <rtems/score/interr.h> #include <rtems/score/isr.h> #include <rtems/score/objectimpl.h> -#include <rtems/score/resourceimpl.h> #include <rtems/score/schedulernodeimpl.h> #include <rtems/score/statesimpl.h> #include <rtems/score/status.h> @@ -79,9 +78,6 @@ extern Thread_Control *_Thread_Allocated_fp; #endif #if defined(RTEMS_SMP) -#define THREAD_RESOURCE_NODE_TO_THREAD( node ) \ - RTEMS_CONTAINER_OF( node, Thread_Control, Resource_node ) - #define THREAD_OF_SCHEDULER_HELP_NODE( node ) \ RTEMS_CONTAINER_OF( node, Thread_Control, Scheduler.Help_node ) #endif @@ -979,14 +975,7 @@ RTEMS_INLINE_ROUTINE bool _Thread_Owns_resources( const Thread_Control *the_thread ) { - bool owns_resources = the_thread->resource_count != 0; - -#if defined(RTEMS_SMP) - owns_resources = owns_resources - || _Resource_Node_owns_resources( &the_thread->Resource_node ); -#endif - - return owns_resources; + return the_thread->resource_count != 0; } #if defined(RTEMS_SMP) diff --git a/cpukit/score/src/threadinitialize.c b/cpukit/score/src/threadinitialize.c index 8fe1785..f151989 100644 --- a/cpukit/score/src/threadinitialize.c +++ b/cpukit/score/src/threadinitialize.c @@ -19,7 +19,6 @@ #endif #include <rtems/score/threadimpl.h> -#include <rtems/score/resourceimpl.h> #include <rtems/score/schedulerimpl.h> #include <rtems/score/stackimpl.h> #include <rtems/score/tls.h> @@ -237,7 +236,6 @@ bool _Thread_Initialize( the_thread->Scheduler.control = scheduler; the_thread->Scheduler.own_node = scheduler_node; the_thread->Scheduler.node = scheduler_node; - _Resource_Node_initialize( &the_thread->Resource_node ); _ISR_lock_Initialize( &the_thread->Scheduler.Lock, "Thread Scheduler" ); _ISR_lock_Initialize( &the_thread->Wait.Lock.Default, "Thread Wait Default" ); _Thread_queue_Gate_open( &the_thread->Wait.Lock.Tranquilizer ); -- 1.8.4.5 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel