Skip to content

Commit b93ff29

Browse files
tleksell-penashif
authored andcommitted
Tracing: Conditional variable tracing
Add conditional variable tracing hooks, default tracing hooks, and documentation. Signed-off-by: Torbjörn Leksell <[email protected]>
1 parent ed6148a commit b93ff29

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

include/tracing/tracing.h

+67
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,73 @@
256256
*/ /* end of mutex_tracing_apis */
257257

258258

259+
260+
261+
/**
262+
* @brief Conditional Variable Tracing APIs
263+
* @defgroup condvar_tracing_apis Conditional Variable Tracing APIs
264+
* @ingroup tracing_apis
265+
* @{
266+
*/
267+
268+
/**
269+
* @brief Trace initialization of Conditional Variable
270+
* @param condvar Conditional Variable object
271+
* @param ret Return value
272+
*/
273+
#define sys_port_trace_k_condvar_init(condvar, ret)
274+
275+
/**
276+
* @brief Trace Conditional Variable signaling start
277+
* @param condvar Conditional Variable object
278+
*/
279+
#define sys_port_trace_k_condvar_signal_enter(condvar)
280+
281+
/**
282+
* @brief Trace Conditional Variable signaling blocking
283+
* @param condvar Conditional Variable object
284+
* @param timeout Timeout period
285+
*/
286+
#define sys_port_trace_k_condvar_signal_blocking(condvar, timeout)
287+
288+
/**
289+
* @brief Trace Conditional Variable signaling outcome
290+
* @param condvar Conditional Variable object
291+
* @param ret Return value
292+
*/
293+
#define sys_port_trace_k_condvar_signal_exit(condvar, ret)
294+
295+
/**
296+
* @brief Trace Conditional Variable broadcast enter
297+
* @param condvar Conditional Variable object
298+
*/
299+
#define sys_port_trace_k_condvar_broadcast_enter(condvar)
300+
301+
/**
302+
* @brief Trace Conditional Variable broadcast exit
303+
* @param condvar Conditional Variable object
304+
* @param ret Return value
305+
*/
306+
#define sys_port_trace_k_condvar_broadcast_exit(condvar, ret)
307+
308+
/**
309+
* @brief Trace Conditional Variable wait enter
310+
* @param condvar Conditional Variable object
311+
*/
312+
#define sys_port_trace_k_condvar_wait_enter(condvar)
313+
314+
/**
315+
* @brief Trace Conditional Variable wait exit
316+
* @param condvar Conditional Variable object
317+
* @param ret Return value
318+
*/
319+
#define sys_port_trace_k_condvar_wait_exit(condvar, ret)
320+
321+
/**
322+
* @}
323+
*/ /* end of condvar_tracing_apis */
324+
325+
259326
/**
260327
* @}
261328
*/

kernel/condvar.c

+19
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ int z_impl_k_condvar_init(struct k_condvar *condvar)
1717
{
1818
z_waitq_init(&condvar->wait_q);
1919
z_object_init(condvar);
20+
21+
SYS_PORT_TRACING_OBJ_INIT(k_condvar, condvar, 0);
22+
2023
return 0;
2124
}
2225

@@ -32,15 +35,23 @@ int z_vrfy_k_condvar_init(struct k_condvar *condvar)
3235
int z_impl_k_condvar_signal(struct k_condvar *condvar)
3336
{
3437
k_spinlock_key_t key = k_spin_lock(&lock);
38+
39+
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_condvar, signal, condvar);
40+
3541
struct k_thread *thread = z_unpend_first_thread(&condvar->wait_q);
3642

3743
if (thread != NULL) {
44+
SYS_PORT_TRACING_OBJ_FUNC_BLOCKING(k_condvar, signal, condvar, K_FOREVER);
45+
3846
arch_thread_return_value_set(thread, 0);
3947
z_ready_thread(thread);
4048
z_reschedule(&lock, key);
4149
} else {
4250
k_spin_unlock(&lock, key);
4351
}
52+
53+
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, signal, condvar, 0);
54+
4455
return 0;
4556
}
4657

@@ -61,6 +72,8 @@ int z_impl_k_condvar_broadcast(struct k_condvar *condvar)
6172

6273
key = k_spin_lock(&lock);
6374

75+
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_condvar, broadcast, condvar);
76+
6477
/* wake up any threads that are waiting to write */
6578
while ((pending_thread = z_unpend_first_thread(&condvar->wait_q)) !=
6679
NULL) {
@@ -69,6 +82,8 @@ int z_impl_k_condvar_broadcast(struct k_condvar *condvar)
6982
z_ready_thread(pending_thread);
7083
}
7184

85+
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, broadcast, condvar, woken);
86+
7287
z_reschedule(&lock, key);
7388

7489
return woken;
@@ -88,12 +103,16 @@ int z_impl_k_condvar_wait(struct k_condvar *condvar, struct k_mutex *mutex,
88103
k_spinlock_key_t key;
89104
int ret;
90105

106+
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_condvar, wait, condvar);
107+
91108
key = k_spin_lock(&lock);
92109
k_mutex_unlock(mutex);
93110

94111
ret = z_pend_curr(&lock, key, &condvar->wait_q, timeout);
95112
k_mutex_lock(mutex, K_FOREVER);
96113

114+
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, wait, condvar, ret);
115+
97116
return ret;
98117
}
99118
#ifdef CONFIG_USERSPACE

0 commit comments

Comments
 (0)