Tracing: Semaphore tracing

Add semahphore tracing using the new trace macros.

Signed-off-by: Torbjörn Leksell <torbjorn.leksell@percepio.com>
This commit is contained in:
Torbjörn Leksell 2021-03-26 09:51:03 +01:00 committed by Anas Nashif
parent 16bbb8ef34
commit fcf2fb6320

View file

@ -66,17 +66,21 @@ int z_impl_k_sem_init(struct k_sem *sem, unsigned int initial_count,
* Limit cannot be zero and count cannot be greater than limit
*/
CHECKIF(limit == 0U || limit > K_SEM_MAX_LIMIT || initial_count > limit) {
SYS_PORT_TRACING_OBJ_FUNC(k_sem, init, sem, -EINVAL);
return -EINVAL;
}
sem->count = initial_count;
sem->limit = limit;
SYS_PORT_TRACING_OBJ_FUNC(k_sem, init, sem, 0);
sys_trace_semaphore_init(sem);
z_waitq_init(&sem->wait_q);
#if defined(CONFIG_POLL)
sys_dlist_init(&sem->poll_events);
#endif
SYS_TRACING_OBJ_INIT(k_sem, sem);
z_object_init(sem);
@ -109,6 +113,8 @@ void z_impl_k_sem_give(struct k_sem *sem)
k_spinlock_key_t key = k_spin_lock(&lock);
struct k_thread *thread;
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_sem, give, sem);
sys_trace_semaphore_give(sem);
thread = z_unpend_first_thread(&sem->wait_q);
@ -121,6 +127,9 @@ void z_impl_k_sem_give(struct k_sem *sem)
}
z_reschedule(&lock, key);
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_sem, give, sem);
sys_trace_end_call(SYS_TRACE_ID_SEMA_GIVE);
}
@ -141,6 +150,9 @@ int z_impl_k_sem_take(struct k_sem *sem, k_timeout_t timeout)
K_TIMEOUT_EQ(timeout, K_NO_WAIT)), "");
k_spinlock_key_t key = k_spin_lock(&lock);
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_sem, take, sem, timeout);
sys_trace_semaphore_take(sem);
if (likely(sem->count > 0U)) {
@ -156,9 +168,13 @@ int z_impl_k_sem_take(struct k_sem *sem, k_timeout_t timeout)
goto out;
}
SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(k_sem, take, sem, timeout);
ret = z_pend_curr(&lock, key, &sem->wait_q, timeout);
out:
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_sem, take, sem, timeout, ret);
sys_trace_end_call(SYS_TRACE_ID_SEMA_TAKE);
return ret;
}
@ -177,6 +193,9 @@ void z_impl_k_sem_reset(struct k_sem *sem)
z_ready_thread(thread);
}
sem->count = 0;
SYS_PORT_TRACING_OBJ_FUNC(k_sem, reset, sem);
handle_poll_events(sem);
z_reschedule(&lock, key);