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 */
|
*/ /* 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_waitq_init(&condvar->wait_q);
|
||||||
z_object_init(condvar);
|
z_object_init(condvar);
|
||||||
|
|
||||||
|
SYS_PORT_TRACING_OBJ_INIT(k_condvar, condvar, 0);
|
||||||
|
|
||||||
return 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)
|
int z_impl_k_condvar_signal(struct k_condvar *condvar)
|
||||||
{
|
{
|
||||||
k_spinlock_key_t key = k_spin_lock(&lock);
|
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);
|
struct k_thread *thread = z_unpend_first_thread(&condvar->wait_q);
|
||||||
|
|
||||||
if (thread != NULL) {
|
if (thread != NULL) {
|
||||||
|
SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(k_condvar, signal, condvar, K_FOREVER);
|
||||||
|
|
||||||
arch_thread_return_value_set(thread, 0);
|
arch_thread_return_value_set(thread, 0);
|
||||||
z_ready_thread(thread);
|
z_ready_thread(thread);
|
||||||
z_reschedule(&lock, key);
|
z_reschedule(&lock, key);
|
||||||
} else {
|
} else {
|
||||||
k_spin_unlock(&lock, key);
|
k_spin_unlock(&lock, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, signal, condvar, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +72,8 @@ int z_impl_k_condvar_broadcast(struct k_condvar *condvar)
|
||||||
|
|
||||||
key = k_spin_lock(&lock);
|
key = k_spin_lock(&lock);
|
||||||
|
|
||||||
|
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_condvar, broadcast, condvar);
|
||||||
|
|
||||||
/* wake up any threads that are waiting to write */
|
/* wake up any threads that are waiting to write */
|
||||||
while ((pending_thread = z_unpend_first_thread(&condvar->wait_q)) !=
|
while ((pending_thread = z_unpend_first_thread(&condvar->wait_q)) !=
|
||||||
NULL) {
|
NULL) {
|
||||||
|
@ -69,6 +82,8 @@ int z_impl_k_condvar_broadcast(struct k_condvar *condvar)
|
||||||
z_ready_thread(pending_thread);
|
z_ready_thread(pending_thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, broadcast, condvar, woken);
|
||||||
|
|
||||||
z_reschedule(&lock, key);
|
z_reschedule(&lock, key);
|
||||||
|
|
||||||
return woken;
|
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;
|
k_spinlock_key_t key;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_condvar, wait, condvar);
|
||||||
|
|
||||||
key = k_spin_lock(&lock);
|
key = k_spin_lock(&lock);
|
||||||
k_mutex_unlock(mutex);
|
k_mutex_unlock(mutex);
|
||||||
|
|
||||||
ret = z_pend_curr(&lock, key, &condvar->wait_q, timeout);
|
ret = z_pend_curr(&lock, key, &condvar->wait_q, timeout);
|
||||||
k_mutex_lock(mutex, K_FOREVER);
|
k_mutex_lock(mutex, K_FOREVER);
|
||||||
|
|
||||||
|
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, wait, condvar, ret);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_USERSPACE
|
#ifdef CONFIG_USERSPACE
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue