Tracing: Mutex tracing hooks
Add mutex trace hooks, default mutex trace hooks, and trace hook
documentation.
Signed-off-by: Torbjörn Leksell <torbjorn.leksell@percepio.com>
diff --git a/kernel/mutex.c b/kernel/mutex.c
index dd39013..7340df8 100644
--- a/kernel/mutex.c
+++ b/kernel/mutex.c
@@ -73,13 +73,12 @@
mutex->owner = NULL;
mutex->lock_count = 0U;
- sys_trace_mutex_init(mutex);
-
z_waitq_init(&mutex->wait_q);
SYS_TRACING_OBJ_INIT(k_mutex, mutex);
z_object_init(mutex);
- sys_trace_end_call(SYS_TRACE_ID_MUTEX_INIT);
+
+ SYS_PORT_TRACING_OBJ_INIT(k_mutex, mutex, 0);
return 0;
}
@@ -124,7 +123,8 @@
__ASSERT(!arch_is_in_isr(), "mutexes cannot be used inside ISRs");
- sys_trace_mutex_lock(mutex);
+ SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_mutex, lock, mutex, timeout);
+
key = k_spin_lock(&lock);
if (likely((mutex->lock_count == 0U) || (mutex->owner == _current))) {
@@ -141,17 +141,22 @@
mutex->owner_orig_prio);
k_spin_unlock(&lock, key);
- sys_trace_end_call(SYS_TRACE_ID_MUTEX_LOCK);
+
+ SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_mutex, lock, mutex, timeout, 0);
return 0;
}
if (unlikely(K_TIMEOUT_EQ(timeout, K_NO_WAIT))) {
k_spin_unlock(&lock, key);
- sys_trace_end_call(SYS_TRACE_ID_MUTEX_LOCK);
+
+ SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_mutex, lock, mutex, timeout, -EBUSY);
+
return -EBUSY;
}
+ SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(k_mutex, lock, mutex, timeout);
+
new_prio = new_prio_for_inheritance(_current->base.prio,
mutex->owner->base.prio);
@@ -169,7 +174,7 @@
got_mutex ? 'y' : 'n');
if (got_mutex == 0) {
- sys_trace_end_call(SYS_TRACE_ID_MUTEX_LOCK);
+ SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_mutex, lock, mutex, timeout, 0);
return 0;
}
@@ -195,7 +200,8 @@
k_spin_unlock(&lock, key);
}
- sys_trace_end_call(SYS_TRACE_ID_MUTEX_LOCK);
+ SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_mutex, lock, mutex, timeout, -EAGAIN);
+
return -EAGAIN;
}
@@ -215,13 +221,19 @@
__ASSERT(!arch_is_in_isr(), "mutexes cannot be used inside ISRs");
+ SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_mutex, unlock, mutex);
+
CHECKIF(mutex->owner == NULL) {
+ SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_mutex, unlock, mutex, -EINVAL);
+
return -EINVAL;
}
/*
* The current thread does not own the mutex.
*/
CHECKIF(mutex->owner != _current) {
+ SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_mutex, unlock, mutex, -EPERM);
+
return -EPERM;
}
@@ -233,7 +245,6 @@
*/
__ASSERT_NO_MSG(mutex->lock_count > 0U);
- sys_trace_mutex_unlock(mutex);
z_sched_lock();
LOG_DBG("mutex %p lock_count: %d", mutex, mutex->lock_count);
@@ -277,7 +288,8 @@
k_mutex_unlock_return:
k_sched_unlock();
- sys_trace_end_call(SYS_TRACE_ID_MUTEX_UNLOCK);
+
+ SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_mutex, unlock, mutex, 0);
return 0;
}