summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-12-23 16:02:07 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-01-11 08:16:27 +0100
commit9a448aabe65f2b85c7721098a3f68f0a99a6728b (patch)
treeb513a68d98d7b9fa8dcabd914c8aeee6246d2e61 /cpukit
parentscore: Delete STATES_WAITING_FOR_BUFFER (diff)
downloadrtems-9a448aabe65f2b85c7721098a3f68f0a99a6728b.tar.bz2
score: Add STATES_THREAD_QUEUE_WITH_IDENTIFIER
Add thread state bit to identify thread queues that are embedded in an object with identifier.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/libdebugger/rtems-debugger-threads.c8
-rw-r--r--cpukit/libmisc/monitor/mon-prmisc.c22
-rw-r--r--cpukit/posix/src/condwaitsupp.c3
-rw-r--r--cpukit/score/include/rtems/score/coresemimpl.h2
-rw-r--r--cpukit/score/include/rtems/score/statesimpl.h27
-rw-r--r--cpukit/score/src/condition.c2
-rw-r--r--cpukit/score/src/corebarrierwait.c2
-rw-r--r--cpukit/score/src/coremsgseize.c2
-rw-r--r--cpukit/score/src/coremsgsubmit.c2
-rw-r--r--cpukit/score/src/coremutexseize.c2
-rw-r--r--cpukit/score/src/corerwlockobtainread.c2
-rw-r--r--cpukit/score/src/corerwlockobtainwrite.c2
-rw-r--r--cpukit/score/src/futex.c2
-rw-r--r--cpukit/score/src/mutex.c2
-rw-r--r--cpukit/score/src/semaphore.c2
-rw-r--r--cpukit/score/src/threadwaitgetid.c10
16 files changed, 43 insertions, 49 deletions
diff --git a/cpukit/libdebugger/rtems-debugger-threads.c b/cpukit/libdebugger/rtems-debugger-threads.c
index aa4cb72053..2e9cf0647d 100644
--- a/cpukit/libdebugger/rtems-debugger-threads.c
+++ b/cpukit/libdebugger/rtems-debugger-threads.c
@@ -521,7 +521,7 @@ rtems_debugger_thread_state_str(rtems_debugger_thread* thread,
{ "Wbar", STATES_WAITING_FOR_BARRIER },
{ "Wcvar", STATES_WAITING_FOR_CONDITION_VARIABLE },
{ "Wevnt", STATES_WAITING_FOR_EVENT },
- { "Wisig", STATES_INTERRUPTIBLE_BY_SIGNAL },
+ { "ISIG" , STATES_INTERRUPTIBLE_BY_SIGNAL },
{ "Wjatx", STATES_WAITING_FOR_JOIN_AT_EXIT },
{ "Wjoin", STATES_WAITING_FOR_JOIN },
{ "Wmsg" , STATES_WAITING_FOR_MESSAGE },
@@ -532,10 +532,8 @@ rtems_debugger_thread_state_str(rtems_debugger_thread* thread,
{ "Wseg", STATES_WAITING_FOR_SEGMENT },
{ "Wsem", STATES_WAITING_FOR_SEMAPHORE },
{ "Wsig", STATES_WAITING_FOR_SIGNAL },
- { "Wslcnd", STATES_WAITING_FOR_SYS_LOCK_CONDITION },
- { "Wslftx", STATES_WAITING_FOR_SYS_LOCK_FUTEX },
- { "Wslmtx", STATES_WAITING_FOR_SYS_LOCK_MUTEX },
- { "Wslsem", STATES_WAITING_FOR_SYS_LOCK_SEMAPHORE },
+ { "Wfutex", STATES_WAITING_FOR_FUTEX },
+ { "TQID", STATES_THREAD_QUEUE_WITH_IDENTIFIER },
{ "Wsysev", STATES_WAITING_FOR_SYSTEM_EVENT },
{ "Wtime", STATES_WAITING_FOR_TIME },
{ "Wwkup", STATES_WAITING_FOR_BSD_WAKEUP },
diff --git a/cpukit/libmisc/monitor/mon-prmisc.c b/cpukit/libmisc/monitor/mon-prmisc.c
index 5f10df133c..5bb4d42a87 100644
--- a/cpukit/libmisc/monitor/mon-prmisc.c
+++ b/cpukit/libmisc/monitor/mon-prmisc.c
@@ -112,29 +112,31 @@ rtems_monitor_dump_priority(rtems_task_priority priority)
return fprintf(stdout,"%3" PRId32, priority);
}
+#define WITH_ID(state) (STATES_THREAD_QUEUE_WITH_IDENTIFIER | state)
+
static const rtems_assoc_t rtems_monitor_state_assoc[] = {
{ "DELAY", STATES_DELAYING, 0 },
{ "DORM", STATES_DORMANT, 0 },
{ "LIFE", STATES_LIFE_IS_CHANGING, 0 },
{ "SUSP", STATES_SUSPENDED, 0 },
- { "Wbar", STATES_WAITING_FOR_BARRIER, 0 },
- { "Wcvar", STATES_WAITING_FOR_CONDITION_VARIABLE, 0 },
+ { "Wbar", WITH_ID(STATES_WAITING_FOR_BARRIER), 0 },
+ { "Wcvar", WITH_ID(STATES_WAITING_FOR_CONDITION_VARIABLE), 0 },
{ "Wevnt", STATES_WAITING_FOR_EVENT, 0 },
{ "Wisig", STATES_INTERRUPTIBLE_BY_SIGNAL, 0 },
{ "Wjatx", STATES_WAITING_FOR_JOIN_AT_EXIT, 0 },
{ "Wjoin", STATES_WAITING_FOR_JOIN, 0 },
- { "Wmsg" , STATES_WAITING_FOR_MESSAGE, 0 },
- { "Wmutex", STATES_WAITING_FOR_MUTEX, 0 },
+ { "Wmsg" , WITH_ID(STATES_WAITING_FOR_MESSAGE), 0 },
+ { "Wmutex", WITH_ID(STATES_WAITING_FOR_MUTEX), 0 },
{ "WRATE", STATES_WAITING_FOR_PERIOD, 0 },
{ "Wrpc", STATES_WAITING_FOR_RPC_REPLY, 0 },
- { "Wrwlk", STATES_WAITING_FOR_RWLOCK, 0 },
+ { "Wrwlk", WITH_ID(STATES_WAITING_FOR_RWLOCK), 0 },
{ "Wseg", STATES_WAITING_FOR_SEGMENT, 0 },
- { "Wsem", STATES_WAITING_FOR_SEMAPHORE, 0 },
+ { "Wsem", WITH_ID(STATES_WAITING_FOR_SEMAPHORE), 0 },
{ "Wsig", STATES_WAITING_FOR_SIGNAL, 0 },
- { "Wslcnd", STATES_WAITING_FOR_SYS_LOCK_CONDITION, 0 },
- { "Wslftx", STATES_WAITING_FOR_SYS_LOCK_FUTEX, 0 },
- { "Wslmtx", STATES_WAITING_FOR_SYS_LOCK_MUTEX, 0 },
- { "Wslsem", STATES_WAITING_FOR_SYS_LOCK_SEMAPHORE, 0 },
+ { "Wcvar", STATES_WAITING_FOR_CONDITION_VARIABLE, 0 },
+ { "Wfutex", STATES_WAITING_FOR_FUTEX, 0 },
+ { "Wmutex", STATES_WAITING_FOR_MUTEX, 0 },
+ { "Wsem", STATES_WAITING_FOR_SEMAPHORE, 0 },
{ "Wsysev", STATES_WAITING_FOR_SYSTEM_EVENT, 0 },
{ "Wtime", STATES_WAITING_FOR_TIME, 0 },
{ "Wwkup", STATES_WAITING_FOR_BSD_WAKEUP, 0 },
diff --git a/cpukit/posix/src/condwaitsupp.c b/cpukit/posix/src/condwaitsupp.c
index 589b5e2810..f485b48861 100644
--- a/cpukit/posix/src/condwaitsupp.c
+++ b/cpukit/posix/src/condwaitsupp.c
@@ -119,7 +119,8 @@ int _POSIX_Condition_variables_Wait_support(
if ( !already_timedout ) {
_Thread_queue_Context_set_thread_state(
&queue_context,
- STATES_WAITING_FOR_CONDITION_VARIABLE
+ STATES_THREAD_QUEUE_WITH_IDENTIFIER
+ | STATES_WAITING_FOR_CONDITION_VARIABLE
);
_Thread_queue_Context_set_enqueue_callout(
&queue_context,
diff --git a/cpukit/score/include/rtems/score/coresemimpl.h b/cpukit/score/include/rtems/score/coresemimpl.h
index 20ca30b366..6082c3bd72 100644
--- a/cpukit/score/include/rtems/score/coresemimpl.h
+++ b/cpukit/score/include/rtems/score/coresemimpl.h
@@ -186,7 +186,7 @@ RTEMS_INLINE_ROUTINE Status_Control _CORE_semaphore_Seize(
_Thread_queue_Context_set_thread_state(
queue_context,
- STATES_WAITING_FOR_SEMAPHORE
+ STATES_THREAD_QUEUE_WITH_IDENTIFIER | STATES_WAITING_FOR_SEMAPHORE
);
_Thread_queue_Context_set_do_nothing_enqueue_callout( queue_context );
_Thread_queue_Enqueue(
diff --git a/cpukit/score/include/rtems/score/statesimpl.h b/cpukit/score/include/rtems/score/statesimpl.h
index 82bcd7908a..89187b7e27 100644
--- a/cpukit/score/include/rtems/score/statesimpl.h
+++ b/cpukit/score/include/rtems/score/statesimpl.h
@@ -82,22 +82,26 @@ extern "C" {
#define STATES_LIFE_IS_CHANGING 0x00800000
/** This macro corresponds to a task waiting for a join. */
#define STATES_WAITING_FOR_JOIN 0x01000000
-/** This macro corresponds to a task waiting for a <sys/lock.h> mutex. */
-#define STATES_WAITING_FOR_SYS_LOCK_MUTEX 0x02000000
-/** This macro corresponds to a task waiting for a <sys/lock.h> semaphore. */
-#define STATES_WAITING_FOR_SYS_LOCK_SEMAPHORE 0x04000000
-/** This macro corresponds to a task waiting for a <sys/lock.h> futex. */
-#define STATES_WAITING_FOR_SYS_LOCK_FUTEX 0x08000000
+/** This macro corresponds to a task waiting for a futex. */
+#define STATES_WAITING_FOR_FUTEX 0x08000000
/** This macro corresponds to a task which is in an interruptible
* blocking state.
*/
#define STATES_INTERRUPTIBLE_BY_SIGNAL 0x10000000
-/** This macro corresponds to a task waiting for a <sys/lock.h> condition. */
-#define STATES_WAITING_FOR_SYS_LOCK_CONDITION 0x20000000
+
+/**
+ * @brief This macro corresponds to a task which is blocked on a thread queue
+ * embedded in an object with an identifier.
+ *
+ * This thread state bit is intended to ease debugging and improve system
+ * diagnostics, see _Thread_Wait_get_id().
+ */
+#define STATES_THREAD_QUEUE_WITH_IDENTIFIER 0x80000000
/** This macro corresponds to a task waiting for a local object operation. */
-#define STATES_LOCALLY_BLOCKED ( STATES_WAITING_FOR_SEGMENT | \
+#define STATES_LOCALLY_BLOCKED ( STATES_THREAD_QUEUE_WITH_IDENTIFIER | \
+ STATES_WAITING_FOR_SEGMENT | \
STATES_WAITING_FOR_MESSAGE | \
STATES_WAITING_FOR_SEMAPHORE | \
STATES_WAITING_FOR_MUTEX | \
@@ -106,10 +110,7 @@ extern "C" {
STATES_WAITING_FOR_SIGNAL | \
STATES_WAITING_FOR_BARRIER | \
STATES_WAITING_FOR_BSD_WAKEUP | \
- STATES_WAITING_FOR_SYS_LOCK_MUTEX | \
- STATES_WAITING_FOR_SYS_LOCK_SEMAPHORE | \
- STATES_WAITING_FOR_SYS_LOCK_FUTEX | \
- STATES_WAITING_FOR_SYS_LOCK_CONDITION | \
+ STATES_WAITING_FOR_FUTEX | \
STATES_WAITING_FOR_RWLOCK )
/** This macro corresponds to a task waiting which is blocked. */
diff --git a/cpukit/score/src/condition.c b/cpukit/score/src/condition.c
index cf929144b3..3c3a01141c 100644
--- a/cpukit/score/src/condition.c
+++ b/cpukit/score/src/condition.c
@@ -111,7 +111,7 @@ static Thread_Control *_Condition_Do_wait(
executing = _Condition_Queue_acquire_critical( condition, &context->Base );
_Thread_queue_Context_set_thread_state(
&context->Base,
- STATES_WAITING_FOR_SYS_LOCK_CONDITION
+ STATES_WAITING_FOR_CONDITION_VARIABLE
);
_Thread_queue_Context_set_enqueue_callout(
&context->Base,
diff --git a/cpukit/score/src/corebarrierwait.c b/cpukit/score/src/corebarrierwait.c
index f47c039e7b..9cce4cfa56 100644
--- a/cpukit/score/src/corebarrierwait.c
+++ b/cpukit/score/src/corebarrierwait.c
@@ -46,7 +46,7 @@ Status_Control _CORE_barrier_Seize(
the_barrier->number_of_waiting_threads = number_of_waiting_threads;
_Thread_queue_Context_set_thread_state(
queue_context,
- STATES_WAITING_FOR_BARRIER
+ STATES_THREAD_QUEUE_WITH_IDENTIFIER | STATES_WAITING_FOR_BARRIER
);
_Thread_queue_Context_set_do_nothing_enqueue_callout( queue_context );
_Thread_queue_Enqueue(
diff --git a/cpukit/score/src/coremsgseize.c b/cpukit/score/src/coremsgseize.c
index b48a3f93d7..98a7b156d4 100644
--- a/cpukit/score/src/coremsgseize.c
+++ b/cpukit/score/src/coremsgseize.c
@@ -115,7 +115,7 @@ Status_Control _CORE_message_queue_Seize(
_Thread_queue_Context_set_thread_state(
queue_context,
- STATES_WAITING_FOR_MESSAGE
+ STATES_THREAD_QUEUE_WITH_IDENTIFIER | STATES_WAITING_FOR_MESSAGE
);
_Thread_queue_Context_set_do_nothing_enqueue_callout( queue_context );
_Thread_queue_Enqueue(
diff --git a/cpukit/score/src/coremsgsubmit.c b/cpukit/score/src/coremsgsubmit.c
index 3c961014e3..5a8827a843 100644
--- a/cpukit/score/src/coremsgsubmit.c
+++ b/cpukit/score/src/coremsgsubmit.c
@@ -133,7 +133,7 @@ Status_Control _CORE_message_queue_Submit(
_Thread_queue_Context_set_thread_state(
queue_context,
- STATES_WAITING_FOR_MESSAGE
+ STATES_THREAD_QUEUE_WITH_IDENTIFIER | STATES_WAITING_FOR_MESSAGE
);
_Thread_queue_Context_set_do_nothing_enqueue_callout( queue_context );
_Thread_queue_Enqueue(
diff --git a/cpukit/score/src/coremutexseize.c b/cpukit/score/src/coremutexseize.c
index 4309380627..b00cad9707 100644
--- a/cpukit/score/src/coremutexseize.c
+++ b/cpukit/score/src/coremutexseize.c
@@ -34,7 +34,7 @@ Status_Control _CORE_mutex_Seize_slow(
if ( wait ) {
_Thread_queue_Context_set_thread_state(
queue_context,
- STATES_WAITING_FOR_MUTEX
+ STATES_THREAD_QUEUE_WITH_IDENTIFIER | STATES_WAITING_FOR_MUTEX
);
_Thread_queue_Context_set_do_nothing_enqueue_callout( queue_context );
_Thread_queue_Context_set_deadlock_callout(
diff --git a/cpukit/score/src/corerwlockobtainread.c b/cpukit/score/src/corerwlockobtainread.c
index 641945635f..035b1d59ae 100644
--- a/cpukit/score/src/corerwlockobtainread.c
+++ b/cpukit/score/src/corerwlockobtainread.c
@@ -80,7 +80,7 @@ Status_Control _CORE_RWLock_Seize_for_reading(
_Thread_queue_Context_set_thread_state(
queue_context,
- STATES_WAITING_FOR_RWLOCK
+ STATES_THREAD_QUEUE_WITH_IDENTIFIER | STATES_WAITING_FOR_RWLOCK
);
_Thread_queue_Context_set_do_nothing_enqueue_callout( queue_context );
_Thread_queue_Enqueue(
diff --git a/cpukit/score/src/corerwlockobtainwrite.c b/cpukit/score/src/corerwlockobtainwrite.c
index 7f636daa99..75168fc062 100644
--- a/cpukit/score/src/corerwlockobtainwrite.c
+++ b/cpukit/score/src/corerwlockobtainwrite.c
@@ -68,7 +68,7 @@ Status_Control _CORE_RWLock_Seize_for_writing(
_Thread_queue_Context_set_thread_state(
queue_context,
- STATES_WAITING_FOR_RWLOCK
+ STATES_THREAD_QUEUE_WITH_IDENTIFIER | STATES_WAITING_FOR_RWLOCK
);
_Thread_queue_Context_set_do_nothing_enqueue_callout( queue_context );
_Thread_queue_Enqueue(
diff --git a/cpukit/score/src/futex.c b/cpukit/score/src/futex.c
index ea4cc89344..d09b00b1c9 100644
--- a/cpukit/score/src/futex.c
+++ b/cpukit/score/src/futex.c
@@ -94,7 +94,7 @@ int _Futex_Wait( struct _Futex_Control *_futex, int *uaddr, int val )
if ( *uaddr == val ) {
_Thread_queue_Context_set_thread_state(
&queue_context,
- STATES_WAITING_FOR_SYS_LOCK_FUTEX
+ STATES_WAITING_FOR_FUTEX
);
_Thread_queue_Context_set_do_nothing_enqueue_callout( &queue_context );
_Thread_queue_Context_set_no_timeout( &queue_context );
diff --git a/cpukit/score/src/mutex.c b/cpukit/score/src/mutex.c
index 30fba4e2fd..ebdedf773d 100644
--- a/cpukit/score/src/mutex.c
+++ b/cpukit/score/src/mutex.c
@@ -111,7 +111,7 @@ static void _Mutex_Acquire_slow(
{
_Thread_queue_Context_set_thread_state(
queue_context,
- STATES_WAITING_FOR_SYS_LOCK_MUTEX
+ STATES_WAITING_FOR_MUTEX
);
_Thread_queue_Context_set_do_nothing_enqueue_callout( queue_context );
_Thread_queue_Context_set_deadlock_callout(
diff --git a/cpukit/score/src/semaphore.c b/cpukit/score/src/semaphore.c
index 7619147ece..5e64583803 100644
--- a/cpukit/score/src/semaphore.c
+++ b/cpukit/score/src/semaphore.c
@@ -105,7 +105,7 @@ void _Semaphore_Wait( struct _Semaphore_Control *_sem )
} else {
_Thread_queue_Context_set_thread_state(
&queue_context,
- STATES_WAITING_FOR_SYS_LOCK_SEMAPHORE
+ STATES_WAITING_FOR_SEMAPHORE
);
_Thread_queue_Context_set_do_nothing_enqueue_callout( &queue_context );
_Thread_queue_Context_set_no_timeout( &queue_context );
diff --git a/cpukit/score/src/threadwaitgetid.c b/cpukit/score/src/threadwaitgetid.c
index 6c12fd6d3e..9f17250353 100644
--- a/cpukit/score/src/threadwaitgetid.c
+++ b/cpukit/score/src/threadwaitgetid.c
@@ -18,14 +18,6 @@
#include <rtems/score/threadimpl.h>
-#define THREAD_WAIT_QUEUE_OBJECT_STATES \
- ( STATES_WAITING_FOR_BARRIER \
- | STATES_WAITING_FOR_CONDITION_VARIABLE \
- | STATES_WAITING_FOR_MESSAGE \
- | STATES_WAITING_FOR_MUTEX \
- | STATES_WAITING_FOR_RWLOCK \
- | STATES_WAITING_FOR_SEMAPHORE )
-
Objects_Id _Thread_Wait_get_id( const Thread_Control *the_thread )
{
States_Control current_state;
@@ -38,7 +30,7 @@ Objects_Id _Thread_Wait_get_id( const Thread_Control *the_thread )
}
#endif
- if ( ( current_state & THREAD_WAIT_QUEUE_OBJECT_STATES ) != 0 ) {
+ if ( ( current_state & STATES_THREAD_QUEUE_WITH_IDENTIFIER ) != 0 ) {
const Thread_queue_Object *queue_object;
queue_object = THREAD_QUEUE_QUEUE_TO_OBJECT( the_thread->Wait.queue );