Skip to content

Commit 5dac94f

Browse files
committed
tracing: ctf: add condition variables
Add hooks for condition variables. Signed-off-by: Anas Nashif <[email protected]>
1 parent e1a768b commit 5dac94f

File tree

10 files changed

+223
-29
lines changed

10 files changed

+223
-29
lines changed

include/zephyr/tracing/tracing.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -876,14 +876,14 @@
876876
* @brief Trace Conditional Variable wait enter
877877
* @param condvar Conditional Variable object
878878
*/
879-
#define sys_port_trace_k_condvar_wait_enter(condvar)
879+
#define sys_port_trace_k_condvar_wait_enter(condvar, timeout)
880880

881881
/**
882882
* @brief Trace Conditional Variable wait exit
883883
* @param condvar Conditional Variable object
884884
* @param ret Return value
885885
*/
886-
#define sys_port_trace_k_condvar_wait_exit(condvar, ret)
886+
#define sys_port_trace_k_condvar_wait_exit(condvar, timeout, ret)
887887

888888
/** @} */ /* end of subsys_tracing_apis_condvar */
889889

kernel/condvar.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,15 @@ int z_impl_k_condvar_wait(struct k_condvar *condvar, struct k_mutex *mutex,
117117
k_spinlock_key_t key;
118118
int ret;
119119

120-
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_condvar, wait, condvar);
120+
SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_condvar, wait, condvar, timeout);
121121

122122
key = k_spin_lock(&lock);
123123
k_mutex_unlock(mutex);
124124

125125
ret = z_pend_curr(&lock, key, &condvar->wait_q, timeout);
126126
k_mutex_lock(mutex, K_FOREVER);
127127

128-
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, wait, condvar, ret);
128+
SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_condvar, wait, condvar, timeout, ret);
129129

130130
return ret;
131131
}

subsys/tracing/ctf/ctf_top.c

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,7 @@ void sys_trace_k_msgq_cleanup_enter(struct k_msgq *msgq)
388388
(uint32_t)(uintptr_t)msgq
389389
);
390390
}
391+
391392
void sys_trace_k_msgq_cleanup_exit(struct k_msgq *msgq, int ret)
392393
{
393394
ctf_top_msgq_cleanup_exit(
@@ -396,6 +397,69 @@ void sys_trace_k_msgq_cleanup_exit(struct k_msgq *msgq, int ret)
396397
);
397398
}
398399

400+
/* Condition Variables */
401+
void sys_trace_k_condvar_init(struct k_condvar *condvar, int ret)
402+
{
403+
ctf_top_condvar_init(
404+
(uint32_t)(uintptr_t)condvar,
405+
(int32_t)ret
406+
);
407+
}
408+
409+
void sys_trace_k_condvar_wait_enter(struct k_condvar *condvar, k_timeout_t timeout)
410+
{
411+
ctf_top_condvar_wait_enter(
412+
(uint32_t)(uintptr_t)condvar,
413+
k_ticks_to_us_floor32((uint32_t)timeout.ticks)
414+
);
415+
}
416+
417+
void sys_trace_k_condvar_wait_exit(struct k_condvar *condvar, k_timeout_t timeout, int ret)
418+
{
419+
ctf_top_condvar_wait_exit(
420+
(uint32_t)(uintptr_t)condvar,
421+
k_ticks_to_us_floor32((uint32_t)timeout.ticks),
422+
(int32_t)ret
423+
);
424+
}
425+
426+
void sys_trace_k_condvar_signal_enter(struct k_condvar *condvar)
427+
{
428+
ctf_top_condvar_signal_enter(
429+
(uint32_t)(uintptr_t)condvar
430+
);
431+
}
432+
433+
void sys_trace_k_condvar_signal_blocking(struct k_condvar *condvar, k_timeout_t timeout)
434+
{
435+
ctf_top_condvar_signal_blocking(
436+
(uint32_t)(uintptr_t)condvar,
437+
k_ticks_to_us_floor32((uint32_t)timeout.ticks)
438+
);
439+
}
440+
441+
void sys_trace_k_condvar_signal_exit(struct k_condvar *condvar, int ret)
442+
{
443+
ctf_top_condvar_signal_exit(
444+
(uint32_t)(uintptr_t)condvar,
445+
(int32_t)ret
446+
);
447+
}
448+
void sys_trace_k_condvar_broadcast_enter(struct k_condvar *condvar)
449+
{
450+
ctf_top_condvar_broadcast_enter(
451+
(uint32_t)(uintptr_t)condvar
452+
);
453+
}
454+
void sys_trace_k_condvar_broadcast_exit(struct k_condvar *condvar, int ret)
455+
{
456+
ctf_top_condvar_broadcast_exit(
457+
(uint32_t)(uintptr_t)condvar,
458+
(int32_t)ret
459+
);
460+
}
461+
462+
399463
/* Semaphore */
400464
void sys_trace_k_sem_init(struct k_sem *sem, int ret)
401465
{

subsys/tracing/ctf/ctf_top.h

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,17 @@ typedef enum {
215215
CTF_EVENT_MSGQ_PUT_FRONT_BLOCKING = 0x94,
216216
CTF_EVENT_MSGQ_CLEANUP_ENTER = 0x95,
217217
CTF_EVENT_MSGQ_CLEANUP_EXIT = 0x96,
218+
219+
/* Condition Variables */
220+
CTF_EVENT_CONDVAR_INIT = 0x97,
221+
CTF_EVENT_CONDVAR_SIGNAL_ENTER = 0x98,
222+
CTF_EVENT_CONDVAR_SIGNAL_BLOCKING = 0x99,
223+
CTF_EVENT_CONDVAR_SIGNAL_EXIT = 0x9A,
224+
CTF_EVENT_CONDVAR_BROADCAST_ENTER = 0x9B,
225+
CTF_EVENT_CONDVAR_BROADCAST_EXIT = 0x9C,
226+
CTF_EVENT_CONDVAR_WAIT_ENTER = 0x9D,
227+
CTF_EVENT_CONDVAR_WAIT_EXIT = 0x9E,
228+
218229
} ctf_event_t;
219230

220231
typedef struct {
@@ -462,6 +473,39 @@ static inline void ctf_top_msgq_cleanup_exit(uint32_t msgq_id, int32_t ret)
462473
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_CLEANUP_EXIT), msgq_id, ret);
463474
}
464475

476+
/* Condition Variables */
477+
static inline void ctf_top_condvar_init(uint32_t condvar_id, int32_t ret)
478+
{
479+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_CONDVAR_INIT), condvar_id, ret);
480+
}
481+
static inline void ctf_top_condvar_signal_enter(uint32_t condvar_id)
482+
{
483+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_CONDVAR_SIGNAL_ENTER), condvar_id);
484+
}
485+
static inline void ctf_top_condvar_signal_blocking(uint32_t condvar_id, uint32_t timeout)
486+
{
487+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_CONDVAR_SIGNAL_BLOCKING), condvar_id, timeout);
488+
}
489+
static inline void ctf_top_condvar_signal_exit(uint32_t condvar_id, int32_t ret)
490+
{
491+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_CONDVAR_SIGNAL_EXIT), condvar_id, ret);
492+
}
493+
static inline void ctf_top_condvar_broadcast_enter(uint32_t condvar_id)
494+
{
495+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_CONDVAR_BROADCAST_ENTER), condvar_id);
496+
}
497+
static inline void ctf_top_condvar_broadcast_exit(uint32_t condvar_id, int32_t ret)
498+
{
499+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_CONDVAR_BROADCAST_EXIT), condvar_id, ret);
500+
}
501+
static inline void ctf_top_condvar_wait_enter(uint32_t condvar_id, uint32_t timeout)
502+
{
503+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_CONDVAR_WAIT_ENTER), condvar_id, timeout);
504+
}
505+
static inline void ctf_top_condvar_wait_exit(uint32_t condvar_id, uint32_t timeout, int32_t ret)
506+
{
507+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_CONDVAR_WAIT_EXIT), condvar_id, timeout, ret);
508+
}
465509

466510
/* Semaphore */
467511
static inline void ctf_top_semaphore_init(uint32_t sem_id,

subsys/tracing/ctf/tracing_ctf.h

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,22 @@ extern "C" {
181181
#define sys_port_trace_k_timer_status_sync_exit(timer, result) \
182182
sys_trace_k_timer_status_sync_exit(timer, result)
183183

184-
#define sys_port_trace_k_condvar_init(condvar, ret)
185-
#define sys_port_trace_k_condvar_signal_enter(condvar)
186-
#define sys_port_trace_k_condvar_signal_blocking(condvar, timeout)
187-
#define sys_port_trace_k_condvar_signal_exit(condvar, ret)
188-
#define sys_port_trace_k_condvar_broadcast_enter(condvar)
189-
#define sys_port_trace_k_condvar_broadcast_exit(condvar, ret)
190-
#define sys_port_trace_k_condvar_wait_enter(condvar)
191-
#define sys_port_trace_k_condvar_wait_exit(condvar, ret)
184+
#define sys_port_trace_k_condvar_init(condvar, ret) \
185+
sys_trace_k_condvar_init(condvar, ret)
186+
#define sys_port_trace_k_condvar_signal_enter(condvar) \
187+
sys_trace_k_condvar_signal_enter(condvar)
188+
#define sys_port_trace_k_condvar_signal_blocking(condvar, timeout) \
189+
sys_trace_k_condvar_signal_blocking(condvar, timeout)
190+
#define sys_port_trace_k_condvar_signal_exit(condvar, ret) \
191+
sys_trace_k_condvar_signal_exit(condvar, ret)
192+
#define sys_port_trace_k_condvar_broadcast_enter(condvar) \
193+
sys_trace_k_condvar_broadcast_enter(condvar)
194+
#define sys_port_trace_k_condvar_broadcast_exit(condvar, ret) \
195+
sys_trace_k_condvar_broadcast_exit(condvar, ret)
196+
#define sys_port_trace_k_condvar_wait_enter(condvar, timeout) \
197+
sys_trace_k_condvar_wait_enter(condvar, timeout)
198+
#define sys_port_trace_k_condvar_wait_exit(condvar, timeout, ret) \
199+
sys_trace_k_condvar_wait_exit(condvar, timeout, ret)
192200

193201
#define sys_port_trace_k_queue_init(queue)
194202
#define sys_port_trace_k_queue_cancel_wait(queue)
@@ -479,8 +487,17 @@ void sys_trace_k_msgq_get_exit(struct k_msgq *msgq, k_timeout_t timeout, int ret
479487
void sys_trace_k_msgq_peek(struct k_msgq *msgq, int ret);
480488
void sys_trace_k_msgq_purge(struct k_msgq *msgq);
481489

482-
/* Semaphore */
490+
/* Condition Variables */
491+
void sys_trace_k_condvar_init(struct k_condvar *condvar, int ret);
492+
void sys_trace_k_condvar_signal_enter(struct k_condvar *condvar);
493+
void sys_trace_k_condvar_signal_blocking(struct k_condvar *condvar, k_timeout_t timeout);
494+
void sys_trace_k_condvar_signal_exit(struct k_condvar *condvar, int ret);
495+
void sys_trace_k_condvar_broadcast_enter(struct k_condvar *condvar);
496+
void sys_trace_k_condvar_broadcast_exit(struct k_condvar *condvar, int ret);
497+
void sys_trace_k_condvar_wait_enter(struct k_condvar *condvar, k_timeout_t timeout);
498+
void sys_trace_k_condvar_wait_exit(struct k_condvar *condvar, k_timeout_t timeout, int ret);
483499

500+
/* Semaphore */
484501
void sys_trace_k_sem_init(struct k_sem *sem, int ret);
485502
void sys_trace_k_sem_give_enter(struct k_sem *sem);
486503

subsys/tracing/ctf/tsdl/metadata

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1262,3 +1262,75 @@ event {
12621262
int32_t ret;
12631263
};
12641264
};
1265+
1266+
/* Condition Variables */
1267+
event {
1268+
name = condvar_init;
1269+
id = 0x97;
1270+
fields := struct {
1271+
uint32_t id;
1272+
int32_t ret;
1273+
};
1274+
};
1275+
1276+
event {
1277+
name = condvar_signal_enter;
1278+
id = 0x98;
1279+
fields := struct {
1280+
uint32_t id;
1281+
};
1282+
};
1283+
1284+
event {
1285+
name = condvar_signal_blocking;
1286+
id = 0x99;
1287+
fields := struct {
1288+
uint32_t id;
1289+
uint32_t timeout;
1290+
};
1291+
};
1292+
1293+
event {
1294+
name = condvar_signal_exit;
1295+
id = 0x9A;
1296+
fields := struct {
1297+
uint32_t id;
1298+
int32_t ret;
1299+
};
1300+
};
1301+
1302+
event {
1303+
name = condvar_broadcast_enter;
1304+
id = 0x9B;
1305+
fields := struct {
1306+
uint32_t id;
1307+
};
1308+
};
1309+
1310+
event {
1311+
name = condvar_broadcast_exit;
1312+
id = 0x9C;
1313+
fields := struct {
1314+
uint32_t id;
1315+
int32_t ret;
1316+
};
1317+
};
1318+
1319+
event {
1320+
name = condvar_wait_enter;
1321+
id = 0x9D;
1322+
fields := struct {
1323+
uint32_t id;
1324+
uint32_t timeout;
1325+
};
1326+
};
1327+
1328+
event {
1329+
name = condvar_wait_exit;
1330+
id = 0x9E;
1331+
fields := struct {
1332+
uint32_t id;
1333+
uint32_t timeout;
1334+
int32_t ret;
1335+
};
1336+
};

subsys/tracing/test/tracing_string_format_test.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,14 +243,13 @@ void sys_trace_k_condvar_signal_exit(struct k_condvar *condvar, int ret)
243243
TRACING_STRING("%s: %p\n", __func__, condvar);
244244
}
245245

246-
void sys_trace_k_condvar_wait_enter(struct k_condvar *condvar, struct k_mutex *mutex,
247-
k_timeout_t timeout)
246+
void sys_trace_k_condvar_wait_enter(struct k_condvar *condvar, k_timeout_t timeout)
248247
{
249248
TRACING_STRING("%s: %p\n", __func__, condvar);
250249
}
251250

252-
void sys_trace_k_condvar_wait_exit(struct k_condvar *condvar, struct k_mutex *mutex,
253-
k_timeout_t timeout, int ret)
251+
void sys_trace_k_condvar_wait_exit(struct k_condvar *condvar, k_timeout_t timeout,
252+
int ret)
254253
{
255254
TRACING_STRING("%s: %p\n", __func__, condvar);
256255
}

subsys/tracing/test/tracing_test.h

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,10 @@
152152
sys_trace_k_condvar_broadcast_enter(condvar)
153153
#define sys_port_trace_k_condvar_broadcast_exit(condvar, ret) \
154154
sys_trace_k_condvar_broadcast_exit(condvar, ret)
155-
#define sys_port_trace_k_condvar_wait_enter(condvar) \
156-
sys_trace_k_condvar_wait_enter(condvar, mutex, timeout)
157-
#define sys_port_trace_k_condvar_wait_exit(condvar, ret) \
158-
sys_trace_k_condvar_wait_exit(condvar, mutex, timeout, ret)
155+
#define sys_port_trace_k_condvar_wait_enter(condvar, timeout) \
156+
sys_trace_k_condvar_wait_enter(condvar, timeout)
157+
#define sys_port_trace_k_condvar_wait_exit(condvar, timeout, ret) \
158+
sys_trace_k_condvar_wait_exit(condvar, timeout, ret)
159159

160160
#define sys_port_trace_k_queue_init(queue) sys_trace_k_queue_init(queue)
161161
#define sys_port_trace_k_queue_cancel_wait(queue) sys_trace_k_queue_cancel_wait(queue)
@@ -555,10 +555,8 @@ void sys_trace_k_condvar_signal_blocking(struct k_condvar *condvar);
555555
void sys_trace_k_condvar_signal_exit(struct k_condvar *condvar, int ret);
556556
void sys_trace_k_condvar_broadcast_enter(struct k_condvar *condvar);
557557
void sys_trace_k_condvar_broadcast_exit(struct k_condvar *condvar, int ret);
558-
void sys_trace_k_condvar_wait_enter(struct k_condvar *condvar, struct k_mutex *mutex,
559-
k_timeout_t timeout);
560-
void sys_trace_k_condvar_wait_exit(struct k_condvar *condvar, struct k_mutex *mutex,
561-
k_timeout_t timeout, int ret);
558+
void sys_trace_k_condvar_wait_enter(struct k_condvar *condvar, k_timeout_t timeout);
559+
void sys_trace_k_condvar_wait_exit(struct k_condvar *condvar, k_timeout_t timeout, int ret);
562560

563561
void sys_trace_k_queue_init(struct k_queue *queue);
564562
void sys_trace_k_queue_cancel_wait(struct k_queue *queue);

subsys/tracing/user/tracing_user.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,8 @@ void sys_trace_gpio_fire_callback_user(const struct device *port, struct gpio_ca
224224
#define sys_port_trace_k_condvar_signal_exit(condvar, ret)
225225
#define sys_port_trace_k_condvar_broadcast_enter(condvar)
226226
#define sys_port_trace_k_condvar_broadcast_exit(condvar, ret)
227-
#define sys_port_trace_k_condvar_wait_enter(condvar)
228-
#define sys_port_trace_k_condvar_wait_exit(condvar, ret)
227+
#define sys_port_trace_k_condvar_wait_enter(condvar, timeout)
228+
#define sys_port_trace_k_condvar_wait_exit(condvar, timeout, ret)
229229

230230
#define sys_port_trace_k_queue_init(queue)
231231
#define sys_port_trace_k_queue_cancel_wait(queue)

tests/subsys/tracing/tracing_api/src/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ ZTEST(tracing_api, test_tracing_sys_api)
170170
sys_trace_k_condvar_signal_enter(&condvar);
171171
sys_trace_k_condvar_signal_blocking(&condvar);
172172
sys_trace_k_condvar_signal_exit(&condvar, ret);
173-
sys_trace_k_condvar_wait_enter(&condvar, &mutex, timeout);
174-
sys_trace_k_condvar_wait_exit(&condvar, &mutex, timeout, ret);
173+
sys_trace_k_condvar_wait_enter(&condvar,timeout);
174+
sys_trace_k_condvar_wait_exit(&condvar, timeout, ret);
175175
/* sem api */
176176
sys_trace_k_sem_init(&sem, ret);
177177
sys_trace_k_sem_give_enter(&sem);

0 commit comments

Comments
 (0)