diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-09-23 14:54:04 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-11-02 10:05:42 +0100 |
commit | 240347331d45b0d424077a8b74ee02efc651e003 (patch) | |
tree | 55b899af8ca3ed9a1a952b8003f9b9c4036d80ad /cpukit/score/include | |
parent | score: Add scheduler node requests (diff) | |
download | rtems-240347331d45b0d424077a8b74ee02efc651e003.tar.bz2 |
score: Add _Thread_Scheduler_process_requests()
Update #2556.
Diffstat (limited to 'cpukit/score/include')
-rw-r--r-- | cpukit/score/include/rtems/score/schedulerimpl.h | 9 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/schedulernode.h | 9 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/threadimpl.h | 2 |
3 files changed, 19 insertions, 1 deletions
diff --git a/cpukit/score/include/rtems/score/schedulerimpl.h b/cpukit/score/include/rtems/score/schedulerimpl.h index 26da986c4f..e33e8d7c97 100644 --- a/cpukit/score/include/rtems/score/schedulerimpl.h +++ b/cpukit/score/include/rtems/score/schedulerimpl.h @@ -358,6 +358,10 @@ RTEMS_INLINE_ROUTINE void _Scheduler_Unblock( Thread_Control *the_thread ) Thread_Control *needs_help; #endif +#if defined(RTEMS_SMP) + _Thread_Scheduler_process_requests( the_thread ); +#endif + scheduler = _Scheduler_Get( the_thread ); _Scheduler_Acquire_critical( scheduler, &lock_context ); @@ -399,6 +403,10 @@ RTEMS_INLINE_ROUTINE void _Scheduler_Update_priority( Thread_Control *the_thread Thread_Control *needs_help; #endif +#if defined(RTEMS_SMP) + _Thread_Scheduler_process_requests( the_thread ); +#endif + own_scheduler = _Scheduler_Get_own( the_thread ); _Scheduler_Acquire_critical( own_scheduler, &lock_context ); @@ -1449,6 +1457,7 @@ RTEMS_INLINE_ROUTINE Status_Control _Scheduler_Set( } #if defined(RTEMS_SMP) + _Thread_Scheduler_process_requests( the_thread ); new_scheduler_node = _Thread_Scheduler_get_node_by_index( the_thread, _Scheduler_Get_index( new_scheduler ) diff --git a/cpukit/score/include/rtems/score/schedulernode.h b/cpukit/score/include/rtems/score/schedulernode.h index 2e0c2afb88..620b029526 100644 --- a/cpukit/score/include/rtems/score/schedulernode.h +++ b/cpukit/score/include/rtems/score/schedulernode.h @@ -185,13 +185,20 @@ struct Scheduler_Node { /** * @brief Node to add this scheduler node to - * Thread_Control::Scheduler::Scheduler_nodes. + * Thread_Control::Scheduler::Scheduler_nodes or a temporary remove list. */ union { /** * @brief The node for Thread_Control::Scheduler::Scheduler_nodes. */ Chain_Node Chain; + + /** + * @brief The next pointer for a temporary remove list. + * + * @see _Thread_Scheduler_process_requests(). + */ + Scheduler_Node *next; } Scheduler_node; /** diff --git a/cpukit/score/include/rtems/score/threadimpl.h b/cpukit/score/include/rtems/score/threadimpl.h index eadcb10198..957fd55305 100644 --- a/cpukit/score/include/rtems/score/threadimpl.h +++ b/cpukit/score/include/rtems/score/threadimpl.h @@ -1051,6 +1051,8 @@ RTEMS_INLINE_ROUTINE void _Thread_Scheduler_release_critical( _ISR_lock_Release( &the_thread->Scheduler.Lock, lock_context ); } +void _Thread_Scheduler_process_requests( Thread_Control *the_thread ); + RTEMS_INLINE_ROUTINE void _Thread_Scheduler_add_request( Thread_Control *the_thread, Scheduler_Node *scheduler_node, |