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; }