Tracing: Conditional variable tracing
Add conditional variable tracing hooks, default tracing hooks, and documentation. Signed-off-by: Torbjörn Leksell <torbjorn.leksell@percepio.com>
This commit is contained in:
parent
ed6148a841
commit
b93ff29e4b
2 changed files with 86 additions and 0 deletions
|
@ -256,6 +256,73 @@
|
|||
*/ /* end of mutex_tracing_apis */
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Conditional Variable Tracing APIs
|
||||
* @defgroup condvar_tracing_apis Conditional Variable Tracing APIs
|
||||
* @ingroup tracing_apis
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Trace initialization of Conditional Variable
|
||||
* @param condvar Conditional Variable object
|
||||
* @param ret Return value
|
||||
*/
|
||||
#define sys_port_trace_k_condvar_init(condvar, ret)
|
||||
|
||||
/**
|
||||
* @brief Trace Conditional Variable signaling start
|
||||
* @param condvar Conditional Variable object
|
||||
*/
|
||||
#define sys_port_trace_k_condvar_signal_enter(condvar)
|
||||
|
||||
/**
|
||||
* @brief Trace Conditional Variable signaling blocking
|
||||
* @param condvar Conditional Variable object
|
||||
* @param timeout Timeout period
|
||||
*/
|
||||
#define sys_port_trace_k_condvar_signal_blocking(condvar, timeout)
|
||||
|
||||
/**
|
||||
* @brief Trace Conditional Variable signaling outcome
|
||||
* @param condvar Conditional Variable object
|
||||
* @param ret Return value
|
||||
*/
|
||||
#define sys_port_trace_k_condvar_signal_exit(condvar, ret)
|
||||
|
||||
/**
|
||||
* @brief Trace Conditional Variable broadcast enter
|
||||
* @param condvar Conditional Variable object
|
||||
*/
|
||||
#define sys_port_trace_k_condvar_broadcast_enter(condvar)
|
||||
|
||||
/**
|
||||
* @brief Trace Conditional Variable broadcast exit
|
||||
* @param condvar Conditional Variable object
|
||||
* @param ret Return value
|
||||
*/
|
||||
#define sys_port_trace_k_condvar_broadcast_exit(condvar, ret)
|
||||
|
||||
/**
|
||||
* @brief Trace Conditional Variable wait enter
|
||||
* @param condvar Conditional Variable object
|
||||
*/
|
||||
#define sys_port_trace_k_condvar_wait_enter(condvar)
|
||||
|
||||
/**
|
||||
* @brief Trace Conditional Variable wait exit
|
||||
* @param condvar Conditional Variable object
|
||||
* @param ret Return value
|
||||
*/
|
||||
#define sys_port_trace_k_condvar_wait_exit(condvar, ret)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/ /* end of condvar_tracing_apis */
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -17,6 +17,9 @@ int z_impl_k_condvar_init(struct k_condvar *condvar)
|
|||
{
|
||||
z_waitq_init(&condvar->wait_q);
|
||||
z_object_init(condvar);
|
||||
|
||||
SYS_PORT_TRACING_OBJ_INIT(k_condvar, condvar, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -32,15 +35,23 @@ int z_vrfy_k_condvar_init(struct k_condvar *condvar)
|
|||
int z_impl_k_condvar_signal(struct k_condvar *condvar)
|
||||
{
|
||||
k_spinlock_key_t key = k_spin_lock(&lock);
|
||||
|
||||
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_condvar, signal, condvar);
|
||||
|
||||
struct k_thread *thread = z_unpend_first_thread(&condvar->wait_q);
|
||||
|
||||
if (thread != NULL) {
|
||||
SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(k_condvar, signal, condvar, K_FOREVER);
|
||||
|
||||
arch_thread_return_value_set(thread, 0);
|
||||
z_ready_thread(thread);
|
||||
z_reschedule(&lock, key);
|
||||
} else {
|
||||
k_spin_unlock(&lock, key);
|
||||
}
|
||||
|
||||
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, signal, condvar, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -61,6 +72,8 @@ int z_impl_k_condvar_broadcast(struct k_condvar *condvar)
|
|||
|
||||
key = k_spin_lock(&lock);
|
||||
|
||||
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_condvar, broadcast, condvar);
|
||||
|
||||
/* wake up any threads that are waiting to write */
|
||||
while ((pending_thread = z_unpend_first_thread(&condvar->wait_q)) !=
|
||||
NULL) {
|
||||
|
@ -69,6 +82,8 @@ int z_impl_k_condvar_broadcast(struct k_condvar *condvar)
|
|||
z_ready_thread(pending_thread);
|
||||
}
|
||||
|
||||
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, broadcast, condvar, woken);
|
||||
|
||||
z_reschedule(&lock, key);
|
||||
|
||||
return woken;
|
||||
|
@ -88,12 +103,16 @@ int z_impl_k_condvar_wait(struct k_condvar *condvar, struct k_mutex *mutex,
|
|||
k_spinlock_key_t key;
|
||||
int ret;
|
||||
|
||||
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_condvar, wait, condvar);
|
||||
|
||||
key = k_spin_lock(&lock);
|
||||
k_mutex_unlock(mutex);
|
||||
|
||||
ret = z_pend_curr(&lock, key, &condvar->wait_q, timeout);
|
||||
k_mutex_lock(mutex, K_FOREVER);
|
||||
|
||||
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, wait, condvar, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#ifdef CONFIG_USERSPACE
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue