From fcf2fb63207c4269c7f3668285dfaef6159b34de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20Leksell?= Date: Fri, 26 Mar 2021 09:51:03 +0100 Subject: [PATCH] Tracing: Semaphore tracing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add semahphore tracing using the new trace macros. Signed-off-by: Torbjörn Leksell --- kernel/sem.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/kernel/sem.c b/kernel/sem.c index 78e93adb62c..6821b793d8d 100644 --- a/kernel/sem.c +++ b/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);