diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-05-28 13:38:48 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-06-03 08:15:16 +0200 |
commit | 304573884356891ccb64fb9b485e82f35ea3f291 (patch) | |
tree | e38c27c92ad6d526b6a3ec5ba6d01da6bfe85415 /cpukit/score/include | |
parent | score: Add and use _Thread_Owns_resources() (diff) | |
download | rtems-304573884356891ccb64fb9b485e82f35ea3f291.tar.bz2 |
score: Add resource node to thread control block
Diffstat (limited to 'cpukit/score/include')
-rw-r--r-- | cpukit/score/include/rtems/score/thread.h | 8 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/threadimpl.h | 10 |
2 files changed, 18 insertions, 0 deletions
diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h index 7229113a22..6ac4eccfbc 100644 --- a/cpukit/score/include/rtems/score/thread.h +++ b/cpukit/score/include/rtems/score/thread.h @@ -28,6 +28,7 @@ #include <rtems/score/object.h> #include <rtems/score/percpu.h> #include <rtems/score/priority.h> +#include <rtems/score/resource.h> #include <rtems/score/stack.h> #include <rtems/score/states.h> #include <rtems/score/threadq.h> @@ -472,6 +473,13 @@ struct Thread_Control_struct { */ Chain_Control lock_mutex; #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 /*================= end of common block =================*/ #if defined(RTEMS_MULTIPROCESSING) /** This field is true if the thread is offered globally */ diff --git a/cpukit/score/include/rtems/score/threadimpl.h b/cpukit/score/include/rtems/score/threadimpl.h index 8b91730d34..7e6681bb75 100644 --- a/cpukit/score/include/rtems/score/threadimpl.h +++ b/cpukit/score/include/rtems/score/threadimpl.h @@ -26,6 +26,7 @@ #include <rtems/score/interr.h> #include <rtems/score/isr.h> #include <rtems/score/objectimpl.h> +#include <rtems/score/resourceimpl.h> #include <rtems/score/statesimpl.h> #include <rtems/score/sysstate.h> #include <rtems/score/todimpl.h> @@ -791,6 +792,10 @@ RTEMS_INLINE_ROUTINE bool _Thread_Is_life_changing( * Resources are accounted with the Thread_Control::resource_count resource * counter. This counter is used by semaphore objects for example. * + * In addition to the resource counter there is a resource dependency tree + * available on SMP configurations. In case this tree is non-empty, then the + * thread owns resources. + * * @param[in] the_thread The thread. */ RTEMS_INLINE_ROUTINE bool _Thread_Owns_resources( @@ -799,6 +804,11 @@ RTEMS_INLINE_ROUTINE bool _Thread_Owns_resources( { 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; } |