Skip to content

Commit 9c5fad3

Browse files
committed
tracing: ctf: add tracing for message queues
Add hooks for message queues. Signed-off-by: Anas Nashif <[email protected]>
1 parent 317e7c4 commit 9c5fad3

File tree

4 files changed

+423
-18
lines changed

4 files changed

+423
-18
lines changed

subsys/tracing/ctf/ctf_top.c

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,134 @@ void sys_trace_k_mem_slab_free_exit(struct k_mem_slab *slab)
268268
);
269269
}
270270

271+
272+
/* Message Queues */
273+
void sys_trace_k_msgq_init(struct k_msgq *msgq)
274+
{
275+
ctf_top_msgq_init(
276+
(uint32_t)(uintptr_t)msgq
277+
);
278+
}
279+
280+
void sys_trace_k_msgq_alloc_init_enter(struct k_msgq *msgq)
281+
{
282+
ctf_top_msgq_alloc_init_enter(
283+
(uint32_t)(uintptr_t)msgq
284+
);
285+
}
286+
287+
void sys_trace_k_msgq_alloc_init_exit(struct k_msgq *msgq, int ret)
288+
{
289+
ctf_top_msgq_alloc_init_exit(
290+
(uint32_t)(uintptr_t)msgq,
291+
(int32_t)ret
292+
);
293+
}
294+
295+
void sys_trace_k_msgq_put_enter(struct k_msgq *msgq, k_timeout_t timeout)
296+
{
297+
ctf_top_msgq_put_enter(
298+
(uint32_t)(uintptr_t)msgq,
299+
k_ticks_to_us_floor32((uint32_t)timeout.ticks)
300+
);
301+
}
302+
303+
void sys_trace_k_msgq_get_enter(struct k_msgq *msgq, k_timeout_t timeout)
304+
{
305+
ctf_top_msgq_get_enter(
306+
(uint32_t)(uintptr_t)msgq,
307+
k_ticks_to_us_floor32((uint32_t)timeout.ticks)
308+
);
309+
}
310+
311+
void sys_trace_k_msgq_get_blocking(struct k_msgq *msgq, k_timeout_t timeout)
312+
{
313+
ctf_top_msgq_get_blocking(
314+
(uint32_t)(uintptr_t)msgq,
315+
k_ticks_to_us_floor32((uint32_t)timeout.ticks)
316+
);
317+
}
318+
319+
void sys_trace_k_msgq_get_exit(struct k_msgq *msgq, k_timeout_t timeout, int ret)
320+
{
321+
ctf_top_msgq_get_exit(
322+
(uint32_t)(uintptr_t)msgq,
323+
k_ticks_to_us_floor32((uint32_t)timeout.ticks),
324+
(int32_t)ret
325+
);
326+
}
327+
328+
void sys_trace_k_msgq_put_blocking(struct k_msgq *msgq, k_timeout_t timeout)
329+
{
330+
ctf_top_msgq_put_blocking(
331+
(uint32_t)(uintptr_t)msgq,
332+
k_ticks_to_us_floor32((uint32_t)timeout.ticks)
333+
);
334+
}
335+
336+
void sys_trace_k_msgq_put_exit(struct k_msgq *msgq, k_timeout_t timeout, int ret)
337+
{
338+
ctf_top_msgq_put_exit(
339+
(uint32_t)(uintptr_t)msgq,
340+
k_ticks_to_us_floor32((uint32_t)timeout.ticks),
341+
(int32_t)ret
342+
);
343+
}
344+
345+
void sys_trace_k_msgq_peek(struct k_msgq *msgq, int ret)
346+
{
347+
ctf_top_msgq_peek(
348+
(uint32_t)(uintptr_t)msgq,
349+
(int32_t)ret
350+
);
351+
}
352+
353+
void sys_trace_k_msgq_purge(struct k_msgq *msgq)
354+
{
355+
ctf_top_msgq_purge(
356+
(uint32_t)(uintptr_t)msgq
357+
);
358+
}
359+
360+
void sys_trace_k_msgq_put_front_enter(struct k_msgq *msgq, k_timeout_t timeout)
361+
{
362+
ctf_top_msgq_put_front_enter(
363+
(uint32_t)(uintptr_t)msgq,
364+
k_ticks_to_us_floor32((uint32_t)timeout.ticks)
365+
);
366+
}
367+
368+
void sys_trace_k_msgq_put_front_blocking(struct k_msgq *msgq, k_timeout_t timeout)
369+
{
370+
ctf_top_msgq_put_front_blocking(
371+
(uint32_t)(uintptr_t)msgq,
372+
k_ticks_to_us_floor32((uint32_t)timeout.ticks)
373+
);
374+
}
375+
376+
void sys_trace_k_msgq_put_front_exit(struct k_msgq *msgq, k_timeout_t timeout, int ret)
377+
{
378+
ctf_top_msgq_put_front_exit(
379+
(uint32_t)(uintptr_t)msgq,
380+
k_ticks_to_us_floor32((uint32_t)timeout.ticks),
381+
(int32_t)ret
382+
);
383+
}
384+
385+
void sys_trace_k_msgq_cleanup_enter(struct k_msgq *msgq)
386+
{
387+
ctf_top_msgq_cleanup_enter(
388+
(uint32_t)(uintptr_t)msgq
389+
);
390+
}
391+
void sys_trace_k_msgq_cleanup_exit(struct k_msgq *msgq, int ret)
392+
{
393+
ctf_top_msgq_cleanup_exit(
394+
(uint32_t)(uintptr_t)msgq,
395+
(int32_t)ret
396+
);
397+
}
398+
271399
/* Semaphore */
272400
void sys_trace_k_sem_init(struct k_sem *sem, int ret)
273401
{
@@ -277,6 +405,7 @@ void sys_trace_k_sem_init(struct k_sem *sem, int ret)
277405
);
278406
}
279407

408+
280409
void sys_trace_k_sem_take_enter(struct k_sem *sem, k_timeout_t timeout)
281410
{
282411
ctf_top_semaphore_take_enter(

subsys/tracing/ctf/ctf_top.h

Lines changed: 102 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,12 @@
5151

5252
#ifdef CONFIG_TRACING_CTF_TIMESTAMP
5353
#define CTF_EVENT(...) \
54-
{ \
54+
{ \
55+
int key = irq_lock(); \
5556
const uint32_t tstamp = k_cyc_to_ns_floor64(k_cycle_get_32()); \
5657
\
5758
CTF_GATHER_FIELDS(tstamp, __VA_ARGS__) \
59+
irq_unlock(key); \
5860
}
5961
#else
6062
#define CTF_EVENT(...) \
@@ -195,6 +197,24 @@ typedef enum {
195197
CTF_EVENT_MEM_SLAB_ALLOC_EXIT = 0x84,
196198
CTF_EVENT_MEM_SLAB_FREE_ENTER = 0x85,
197199
CTF_EVENT_MEM_SLAB_FREE_EXIT = 0x86,
200+
201+
/* Message Queues */
202+
CTF_EVENT_MSGQ_INIT = 0x87,
203+
CTF_EVENT_MSGQ_ALLOC_INIT_ENTER = 0x88,
204+
CTF_EVENT_MSGQ_ALLOC_INIT_EXIT = 0x89,
205+
CTF_EVENT_MSGQ_PUT_ENTER = 0x8A,
206+
CTF_EVENT_MSGQ_PUT_BLOCKING = 0x8B,
207+
CTF_EVENT_MSGQ_PUT_EXIT = 0x8C,
208+
CTF_EVENT_MSGQ_GET_ENTER = 0x8D,
209+
CTF_EVENT_MSGQ_GET_BLOCKING = 0x8E,
210+
CTF_EVENT_MSGQ_GET_EXIT = 0x8F,
211+
CTF_EVENT_MSGQ_PEEK = 0x90,
212+
CTF_EVENT_MSGQ_PURGE = 0x91,
213+
CTF_EVENT_MSGQ_PUT_FRONT_ENTER = 0x92,
214+
CTF_EVENT_MSGQ_PUT_FRONT_EXIT = 0x93,
215+
CTF_EVENT_MSGQ_PUT_FRONT_BLOCKING = 0x94,
216+
CTF_EVENT_MSGQ_CLEANUP_ENTER = 0x95,
217+
CTF_EVENT_MSGQ_CLEANUP_EXIT = 0x96,
198218
} ctf_event_t;
199219

200220
typedef struct {
@@ -362,6 +382,87 @@ static inline void ctf_top_mem_slab_free_exit(uint32_t slab_id)
362382
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MEM_SLAB_FREE_EXIT), slab_id);
363383
}
364384

385+
/* Message Queues*/
386+
static inline void ctf_top_msgq_init(uint32_t msgq_id)
387+
{
388+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_INIT), msgq_id);
389+
}
390+
391+
static inline void ctf_top_msgq_alloc_init_enter(uint32_t msgq_id)
392+
{
393+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_ALLOC_INIT_ENTER), msgq_id);
394+
}
395+
static inline void ctf_top_msgq_alloc_init_exit(uint32_t msgq_id, int32_t ret)
396+
{
397+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_ALLOC_INIT_EXIT), msgq_id, ret);
398+
}
399+
400+
static inline void ctf_top_msgq_put_enter(uint32_t msgq_id, uint32_t timeout)
401+
{
402+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_PUT_ENTER), msgq_id, timeout);
403+
}
404+
405+
static inline void ctf_top_msgq_put_blocking(uint32_t msgq_id, uint32_t timeout)
406+
{
407+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_PUT_BLOCKING), msgq_id, timeout);
408+
}
409+
410+
static inline void ctf_top_msgq_put_exit(uint32_t msgq_id, uint32_t timeout, int32_t ret)
411+
{
412+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_PUT_EXIT), msgq_id, timeout, ret);
413+
}
414+
415+
static inline void ctf_top_msgq_get_enter(uint32_t msgq_id, uint32_t timeout)
416+
{
417+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_GET_ENTER), msgq_id, timeout);
418+
}
419+
420+
static inline void ctf_top_msgq_get_blocking(uint32_t msgq_id, uint32_t timeout)
421+
{
422+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_GET_BLOCKING), msgq_id, timeout);
423+
}
424+
425+
static inline void ctf_top_msgq_get_exit(uint32_t msgq_id, uint32_t timeout, int32_t ret)
426+
{
427+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_GET_EXIT), msgq_id, timeout, ret);
428+
}
429+
430+
static inline void ctf_top_msgq_peek(uint32_t msgq_id, int32_t ret)
431+
{
432+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_PEEK), msgq_id, ret);
433+
}
434+
435+
static inline void ctf_top_msgq_purge(uint32_t msgq_id)
436+
{
437+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_PURGE), msgq_id);
438+
}
439+
440+
static inline void ctf_top_msgq_put_front_enter(uint32_t msgq_id, uint32_t timeout)
441+
{
442+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_PUT_FRONT_ENTER), msgq_id, timeout);
443+
}
444+
445+
static inline void ctf_top_msgq_put_front_exit(uint32_t msgq_id, uint32_t timeout, int32_t ret)
446+
{
447+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_PUT_FRONT_EXIT), msgq_id, timeout, ret);
448+
}
449+
450+
static inline void ctf_top_msgq_put_front_blocking(uint32_t msgq_id, uint32_t timeout)
451+
{
452+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_PUT_FRONT_BLOCKING), msgq_id, timeout);
453+
}
454+
455+
static inline void ctf_top_msgq_cleanup_enter(uint32_t msgq_id)
456+
{
457+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_CLEANUP_ENTER), msgq_id);
458+
}
459+
460+
static inline void ctf_top_msgq_cleanup_exit(uint32_t msgq_id, int32_t ret)
461+
{
462+
CTF_EVENT(CTF_LITERAL(uint8_t, CTF_EVENT_MSGQ_CLEANUP_EXIT), msgq_id, ret);
463+
}
464+
465+
365466
/* Semaphore */
366467
static inline void ctf_top_semaphore_init(uint32_t sem_id,
367468
int32_t ret)

subsys/tracing/ctf/tracing_ctf.h

Lines changed: 51 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -259,22 +259,38 @@ extern "C" {
259259
#define sys_port_trace_k_stack_pop_blocking(stack, timeout)
260260
#define sys_port_trace_k_stack_pop_exit(stack, timeout, ret)
261261

262-
#define sys_port_trace_k_msgq_init(msgq)
263-
#define sys_port_trace_k_msgq_alloc_init_enter(msgq)
264-
#define sys_port_trace_k_msgq_alloc_init_exit(msgq, ret)
265-
#define sys_port_trace_k_msgq_cleanup_enter(msgq)
266-
#define sys_port_trace_k_msgq_cleanup_exit(msgq, ret)
267-
#define sys_port_trace_k_msgq_put_enter(msgq, timeout)
268-
#define sys_port_trace_k_msgq_put_blocking(msgq, timeout)
269-
#define sys_port_trace_k_msgq_put_exit(msgq, timeout, ret)
270-
#define sys_port_trace_k_msgq_put_front_enter(msgq, timeout)
271-
#define sys_port_trace_k_msgq_put_front_blocking(msgq, timeout)
272-
#define sys_port_trace_k_msgq_put_front_exit(msgq, timeout, ret)
273-
#define sys_port_trace_k_msgq_get_enter(msgq, timeout)
274-
#define sys_port_trace_k_msgq_get_blocking(msgq, timeout)
275-
#define sys_port_trace_k_msgq_get_exit(msgq, timeout, ret)
276-
#define sys_port_trace_k_msgq_peek(msgq, ret)
277-
#define sys_port_trace_k_msgq_purge(msgq)
262+
#define sys_port_trace_k_msgq_init(msgq) \
263+
sys_trace_k_msgq_init(msgq)
264+
#define sys_port_trace_k_msgq_alloc_init_enter(msgq) \
265+
sys_trace_k_msgq_alloc_init_enter(msgq)
266+
#define sys_port_trace_k_msgq_alloc_init_exit(msgq, ret) \
267+
sys_trace_k_msgq_alloc_init_exit(msgq, ret)
268+
#define sys_port_trace_k_msgq_cleanup_enter(msgq) \
269+
sys_trace_k_msgq_cleanup_enter(msgq)
270+
#define sys_port_trace_k_msgq_cleanup_exit(msgq, ret) \
271+
sys_trace_k_msgq_cleanup_exit(msgq, ret)
272+
#define sys_port_trace_k_msgq_put_enter(msgq, timeout) \
273+
sys_trace_k_msgq_put_enter(msgq, timeout)
274+
#define sys_port_trace_k_msgq_put_blocking(msgq, timeout) \
275+
sys_trace_k_msgq_put_blocking(msgq, timeout)
276+
#define sys_port_trace_k_msgq_put_exit(msgq, timeout, ret) \
277+
sys_trace_k_msgq_put_exit(msgq, timeout, ret)
278+
#define sys_port_trace_k_msgq_put_front_enter(msgq, timeout) \
279+
sys_trace_k_msgq_put_front_enter(msgq, timeout)
280+
#define sys_port_trace_k_msgq_put_front_blocking(msgq, timeout) \
281+
sys_trace_k_msgq_put_front_blocking(msgq, timeout)
282+
#define sys_port_trace_k_msgq_put_front_exit(msgq, timeout, ret) \
283+
sys_trace_k_msgq_put_front_exit(msgq, timeout, ret)
284+
#define sys_port_trace_k_msgq_get_enter(msgq, timeout) \
285+
sys_trace_k_msgq_get_enter(msgq, timeout)
286+
#define sys_port_trace_k_msgq_get_blocking(msgq, timeout) \
287+
sys_trace_k_msgq_get_blocking(msgq, timeout)
288+
#define sys_port_trace_k_msgq_get_exit(msgq, timeout, ret) \
289+
sys_trace_k_msgq_get_exit(msgq, timeout, ret)
290+
#define sys_port_trace_k_msgq_peek(msgq, ret) \
291+
sys_trace_k_msgq_peek(msgq, ret)
292+
#define sys_port_trace_k_msgq_purge(msgq) \
293+
sys_trace_k_msgq_purge(msgq)
278294

279295
#define sys_port_trace_k_mbox_init(mbox)
280296
#define sys_port_trace_k_mbox_message_put_enter(mbox, timeout)
@@ -444,6 +460,25 @@ void sys_trace_k_mem_slab_alloc_exit(struct k_mem_slab *slab, k_timeout_t timeou
444460
void sys_trace_k_mem_slab_free_enter(struct k_mem_slab *slab);
445461
void sys_trace_k_mem_slab_free_exit(struct k_mem_slab *slab);
446462

463+
464+
/* Message Queues */
465+
void sys_trace_k_msgq_init(struct k_msgq *msgq);
466+
void sys_trace_k_msgq_alloc_init_enter(struct k_msgq *msgq);
467+
void sys_trace_k_msgq_alloc_init_exit(struct k_msgq *msgq, int ret);
468+
void sys_trace_k_msgq_cleanup_enter(struct k_msgq *msgq);
469+
void sys_trace_k_msgq_cleanup_exit(struct k_msgq *msgq, int ret);
470+
void sys_trace_k_msgq_put_enter(struct k_msgq *msgq, k_timeout_t timeout);
471+
void sys_trace_k_msgq_put_blocking(struct k_msgq *msgq, k_timeout_t timeout);
472+
void sys_trace_k_msgq_put_exit(struct k_msgq *msgq, k_timeout_t timeout, int ret);
473+
void sys_trace_k_msgq_put_front_enter(struct k_msgq *msgq, k_timeout_t timeout);
474+
void sys_trace_k_msgq_put_front_blocking(struct k_msgq *msgq, k_timeout_t timeout);
475+
void sys_trace_k_msgq_put_front_exit(struct k_msgq *msgq, k_timeout_t timeout, int ret);
476+
void sys_trace_k_msgq_get_enter(struct k_msgq *msgq, k_timeout_t timeout);
477+
void sys_trace_k_msgq_get_blocking(struct k_msgq *msgq, k_timeout_t timeout);
478+
void sys_trace_k_msgq_get_exit(struct k_msgq *msgq, k_timeout_t timeout, int ret);
479+
void sys_trace_k_msgq_peek(struct k_msgq *msgq, int ret);
480+
void sys_trace_k_msgq_purge(struct k_msgq *msgq);
481+
447482
/* Semaphore */
448483

449484
void sys_trace_k_sem_init(struct k_sem *sem, int ret);

0 commit comments

Comments
 (0)