summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-09-23 14:54:04 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-11-02 10:05:42 +0100
commit240347331d45b0d424077a8b74ee02efc651e003 (patch)
tree55b899af8ca3ed9a1a952b8003f9b9c4036d80ad /cpukit/score/include
parentscore: Add scheduler node requests (diff)
downloadrtems-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.h9
-rw-r--r--cpukit/score/include/rtems/score/schedulernode.h9
-rw-r--r--cpukit/score/include/rtems/score/threadimpl.h2
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,