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:
parent
16bbb8ef34
commit
fcf2fb6320
1 changed files with 20 additions and 1 deletions
21
kernel/sem.c
21
kernel/sem.c
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue