From 3a66d6c69556748be77234fa2ae93d7e02a8a227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20Leksell?= Date: Fri, 26 Mar 2021 14:09:10 +0100 Subject: [PATCH] Tracing: Timer tracing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add Timer tracing, default tracing hooks, and documentation. Signed-off-by: Torbjörn Leksell --- include/tracing/tracing.h | 52 +++++++++++++++++++++++++++++++++++++++ kernel/timer.c | 15 +++++++++++ 2 files changed, 67 insertions(+) diff --git a/include/tracing/tracing.h b/include/tracing/tracing.h index 9cb36fb3558..f9ebf15277b 100644 --- a/include/tracing/tracing.h +++ b/include/tracing/tracing.h @@ -1465,6 +1465,58 @@ */ /* end of mslab_tracing_apis */ + + +/** + * @brief Timer Tracing APIs + * @defgroup timer_tracing_apis Timer Tracing APIs + * @ingroup tracing_apis + * @{ + */ + +/** + * @brief Trace initialization of Timer + * @param timer Timer object + */ +#define sys_port_trace_k_timer_init(timer) + +/** + * @brief Trace Timer start + * @param timer Timer object + */ +#define sys_port_trace_k_timer_start(timer) + +/** + * @brief Trace Timer stop + * @param timer Timer object + */ +#define sys_port_trace_k_timer_stop(timer) + +/** + * @brief Trace Timer status sync entry + * @param timer Timer object + */ +#define sys_port_trace_k_timer_status_sync_enter(timer) + +/** + * @brief Trace Timer Status sync blocking + * @param timer Timer object + * @param timeout Timeout period + */ +#define sys_port_trace_k_timer_status_sync_blocking(timer, timeout) + +/** + * @brief Trace Time Status sync outcome + * @param timer Timer object + * @param result Return value + */ +#define sys_port_trace_k_timer_status_sync_exit(timer, result) + +/** + * @} + */ /* end of timer_tracing_apis */ + + /** * @} */ diff --git a/kernel/timer.c b/kernel/timer.c index a5c93d5ce32..b8faea17145 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -105,6 +105,9 @@ void k_timer_init(struct k_timer *timer, } z_init_timeout(&timer->timeout); + + SYS_PORT_TRACING_OBJ_INIT(k_timer, timer); + SYS_TRACING_OBJ_INIT(k_timer, timer); timer->user_data = NULL; @@ -116,6 +119,8 @@ void k_timer_init(struct k_timer *timer, void z_impl_k_timer_start(struct k_timer *timer, k_timeout_t duration, k_timeout_t period) { + SYS_PORT_TRACING_OBJ_FUNC(k_timer, start, timer); + if (K_TIMEOUT_EQ(duration, K_FOREVER)) { return; } @@ -162,6 +167,8 @@ static inline void z_vrfy_k_timer_start(struct k_timer *timer, void z_impl_k_timer_stop(struct k_timer *timer) { + SYS_PORT_TRACING_OBJ_FUNC(k_timer, stop, timer); + int inactive = z_abort_timeout(&timer->timeout) != 0; if (inactive) { @@ -214,6 +221,7 @@ static inline uint32_t z_vrfy_k_timer_status_get(struct k_timer *timer) uint32_t z_impl_k_timer_status_sync(struct k_timer *timer) { __ASSERT(!arch_is_in_isr(), ""); + SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_timer, status_sync, timer); if (!IS_ENABLED(CONFIG_MULTITHREADING)) { uint32_t result; @@ -243,6 +251,8 @@ uint32_t z_impl_k_timer_status_sync(struct k_timer *timer) if (result == 0U) { if (!z_is_inactive_timeout(&timer->timeout)) { + SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(k_timer, status_sync, timer, K_FOREVER); + /* wait for timer to expire or stop */ (void)z_pend_curr(&lock, key, &timer->wait_q, K_FOREVER); @@ -259,6 +269,11 @@ uint32_t z_impl_k_timer_status_sync(struct k_timer *timer) timer->status = 0U; k_spin_unlock(&lock, key); + /** + * @note New tracing hook + */ + SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_timer, status_sync, timer, result); + return result; }