Skip to content

Commit 0224b3b

Browse files
committed
tracing: rtio: Add tracing hooks for rtio
This commit adds tracing support/hooks for rtio subsystem. It was requested in #76972. Signed-off-by: Dev Joshi <devbhave@qti.qualcomm.com>
1 parent 0ffef90 commit 0224b3b

File tree

7 files changed

+341
-0
lines changed

7 files changed

+341
-0
lines changed

include/zephyr/rtio/rtio.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,9 +1053,12 @@ static inline uint32_t rtio_sqe_acquirable(struct rtio *r)
10531053
*/
10541054
static inline struct rtio_iodev_sqe *rtio_txn_next(const struct rtio_iodev_sqe *iodev_sqe)
10551055
{
1056+
SYS_PORT_TRACING_FUNC_ENTER(rtio, txn_next, iodev_sqe->r, iodev_sqe);
10561057
if (iodev_sqe->sqe.flags & RTIO_SQE_TRANSACTION) {
1058+
SYS_PORT_TRACING_FUNC_EXIT(rtio, txn_next, iodev_sqe->r, iodev_sqe->next);
10571059
return iodev_sqe->next;
10581060
} else {
1061+
SYS_PORT_TRACING_FUNC_EXIT(rtio, txn_next, iodev_sqe->r, NULL);
10591062
return NULL;
10601063
}
10611064
}
@@ -1071,9 +1074,12 @@ static inline struct rtio_iodev_sqe *rtio_txn_next(const struct rtio_iodev_sqe *
10711074
*/
10721075
static inline struct rtio_iodev_sqe *rtio_chain_next(const struct rtio_iodev_sqe *iodev_sqe)
10731076
{
1077+
SYS_PORT_TRACING_FUNC_ENTER(rtio, txn_next, iodev_sqe->r, iodev_sqe);
10741078
if (iodev_sqe->sqe.flags & RTIO_SQE_CHAINED) {
1079+
SYS_PORT_TRACING_FUNC_EXIT(rtio, txn_next, iodev_sqe->r, iodev_sqe->next);
10751080
return iodev_sqe->next;
10761081
} else {
1082+
SYS_PORT_TRACING_FUNC_EXIT(rtio, txn_next, iodev_sqe->r, NULL);
10771083
return NULL;
10781084
}
10791085
}
@@ -1101,14 +1107,17 @@ static inline struct rtio_iodev_sqe *rtio_iodev_sqe_next(const struct rtio_iodev
11011107
*/
11021108
static inline struct rtio_sqe *rtio_sqe_acquire(struct rtio *r)
11031109
{
1110+
SYS_PORT_TRACING_FUNC_ENTER(rtio, sqe_acquire, r);
11041111
struct rtio_iodev_sqe *iodev_sqe = rtio_sqe_pool_alloc(r->sqe_pool);
11051112

11061113
if (iodev_sqe == NULL) {
1114+
SYS_PORT_TRACING_FUNC_EXIT(rtio, sqe_acquire, r, NULL);
11071115
return NULL;
11081116
}
11091117

11101118
mpsc_push(&r->sq, &iodev_sqe->q);
11111119

1120+
SYS_PORT_TRACING_FUNC_EXIT(rtio, sqe_acquire, r, &iodev_sqe->sqe);
11121121
return &iodev_sqe->sqe;
11131122
}
11141123

@@ -1134,14 +1143,17 @@ static inline void rtio_sqe_drop_all(struct rtio *r)
11341143
*/
11351144
static inline struct rtio_cqe *rtio_cqe_acquire(struct rtio *r)
11361145
{
1146+
SYS_PORT_TRACING_FUNC_ENTER(rtio, cqe_acquire, r);
11371147
struct rtio_cqe *cqe = rtio_cqe_pool_alloc(r->cqe_pool);
11381148

11391149
if (cqe == NULL) {
1150+
SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_acquire, r, NULL);
11401151
return NULL;
11411152
}
11421153

11431154
memset(cqe, 0, sizeof(struct rtio_cqe));
11441155

1156+
SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_acquire, r, cqe);
11451157
return cqe;
11461158
}
11471159

@@ -1166,21 +1178,25 @@ static inline void rtio_cqe_produce(struct rtio *r, struct rtio_cqe *cqe)
11661178
*/
11671179
static inline struct rtio_cqe *rtio_cqe_consume(struct rtio *r)
11681180
{
1181+
SYS_PORT_TRACING_FUNC_ENTER(rtio, cqe_consume, r);
11691182
struct mpsc_node *node;
11701183
struct rtio_cqe *cqe = NULL;
11711184

11721185
#ifdef CONFIG_RTIO_CONSUME_SEM
11731186
if (k_sem_take(r->consume_sem, K_NO_WAIT) != 0) {
1187+
SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_consume, r, NULL);
11741188
return NULL;
11751189
}
11761190
#endif
11771191

11781192
node = mpsc_pop(&r->cq);
11791193
if (node == NULL) {
1194+
SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_consume, r, NULL);
11801195
return NULL;
11811196
}
11821197
cqe = CONTAINER_OF(node, struct rtio_cqe, q);
11831198

1199+
SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_consume, r, cqe);
11841200
return cqe;
11851201
}
11861202

@@ -1220,6 +1236,7 @@ static inline struct rtio_cqe *rtio_cqe_consume_block(struct rtio *r)
12201236
*/
12211237
static inline void rtio_cqe_release(struct rtio *r, struct rtio_cqe *cqe)
12221238
{
1239+
SYS_PORT_TRACING_FUNC(rtio, cqe_release, r, cqe);
12231240
rtio_cqe_pool_free(r->cqe_pool, cqe);
12241241
}
12251242

@@ -1374,6 +1391,7 @@ static inline void rtio_iodev_sqe_err(struct rtio_iodev_sqe *iodev_sqe, int resu
13741391
*/
13751392
static inline void rtio_cqe_submit(struct rtio *r, int result, void *userdata, uint32_t flags)
13761393
{
1394+
SYS_PORT_TRACING_FUNC_ENTER(rtio, cqe_submit, r, result, flags);
13771395
struct rtio_cqe *cqe = rtio_cqe_acquire(r);
13781396

13791397
if (cqe == NULL) {
@@ -1406,6 +1424,7 @@ static inline void rtio_cqe_submit(struct rtio *r, int result, void *userdata, u
14061424
}
14071425
}
14081426
#endif
1427+
SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_submit, r);
14091428
}
14101429

14111430
#define __RTIO_MEMPOOL_GET_NUM_BLKS(num_bytes, blk_size) (((num_bytes) + (blk_size)-1) / (blk_size))
@@ -1546,6 +1565,7 @@ __syscall int rtio_sqe_cancel(struct rtio_sqe *sqe);
15461565

15471566
static inline int z_impl_rtio_sqe_cancel(struct rtio_sqe *sqe)
15481567
{
1568+
SYS_PORT_TRACING_FUNC(rtio, sqe_cancel, sqe);
15491569
struct rtio_iodev_sqe *iodev_sqe = CONTAINER_OF(sqe, struct rtio_iodev_sqe, sqe);
15501570

15511571
do {
@@ -1724,6 +1744,7 @@ __syscall int rtio_submit(struct rtio *r, uint32_t wait_count);
17241744
#ifdef CONFIG_RTIO_SUBMIT_SEM
17251745
static inline int z_impl_rtio_submit(struct rtio *r, uint32_t wait_count)
17261746
{
1747+
SYS_PORT_TRACING_FUNC_ENTER(rtio, submit, r, wait_count);
17271748
int res = 0;
17281749

17291750
if (wait_count > 0) {
@@ -1742,12 +1763,14 @@ static inline int z_impl_rtio_submit(struct rtio *r, uint32_t wait_count)
17421763
"semaphore was reset or timed out while waiting on completions!");
17431764
}
17441765

1766+
SYS_PORT_TRACING_FUNC_EXIT(rtio, submit, r);
17451767
return res;
17461768
}
17471769
#else
17481770
static inline int z_impl_rtio_submit(struct rtio *r, uint32_t wait_count)
17491771
{
17501772

1773+
SYS_PORT_TRACING_FUNC_ENTER(rtio, submit, rtio, wait_count);
17511774
int res = 0;
17521775
uintptr_t cq_count = (uintptr_t)atomic_get(&r->cq_count);
17531776
uintptr_t cq_complete_count = cq_count + wait_count;
@@ -1767,6 +1790,7 @@ static inline int z_impl_rtio_submit(struct rtio *r, uint32_t wait_count)
17671790
k_yield();
17681791
}
17691792

1793+
SYS_PORT_TRACING_FUNC_EXIT(rtio, submit, r);
17701794
return res;
17711795
}
17721796
#endif /* CONFIG_RTIO_SUBMIT_SEM */

include/zephyr/tracing/tracing.h

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2656,6 +2656,122 @@
26562656

26572657
/** @} */ /* end of subsys_tracing_apis_gpio */
26582658

2659+
/**
2660+
* @brief RTIO Tracing APIs
2661+
* @defgroup subsys_tracing_apis_rtio RTIO Tracing APIs
2662+
* @{
2663+
*/
2664+
2665+
/**
2666+
* @brief Trace RTIO Submit Enter API
2667+
* @param rtio RTIO context
2668+
* @param wait_count Number of submissions to wait for completion of.
2669+
*/
2670+
#define sys_port_trace_rtio_submit_enter(rtio, wait_count)
2671+
2672+
/**
2673+
* @brief Trace RTIO Submit Exit API
2674+
* @param rtio RTIO context
2675+
*/
2676+
#define sys_port_trace_rtio_submit_exit(rtio)
2677+
2678+
/**
2679+
* @brief Trace RTIO Submission Queue Event Acquire Enter API
2680+
* @param rtio RTIO context
2681+
*/
2682+
#define sys_port_trace_rtio_sqe_acquire_enter(rtio)
2683+
2684+
/**
2685+
* @brief Trace RTIO Submission Queue Event Acquire Exit API
2686+
* @param rtio RTIO context
2687+
* @param sqe Submission Queue Event
2688+
*/
2689+
#define sys_port_trace_rtio_sqe_acquire_exit(rtio, sqe)
2690+
2691+
/**
2692+
* @brief Trace RTIO Submission Queue Event Cancel API
2693+
* @param sqe Submission Queue Event
2694+
*/
2695+
#define sys_port_trace_rtio_sqe_cancel(sqe)
2696+
2697+
/**
2698+
* @brief Trace RTIO Completion Queue Event Submit Enter API
2699+
* @param rtio RTIO context
2700+
* @param result Integer result code (could be -errno)
2701+
* @param flags Flags to use for the CQE see RTIO_CQE_FLAG_*
2702+
*/
2703+
#define sys_port_trace_rtio_cqe_submit_enter(rtio, result, flags)
2704+
2705+
/**
2706+
* @brief Trace RTIO Completion Queue Event Submit Exit API
2707+
* @param rtio RTIO context
2708+
*/
2709+
#define sys_port_trace_rtio_cqe_submit_exit(rtio)
2710+
2711+
/**
2712+
* @brief Trace RTIO Completion Queue Event Acquire Enter API
2713+
* @param rtio RTIO context
2714+
*/
2715+
#define sys_port_trace_rtio_cqe_acquire_enter(rtio)
2716+
2717+
/**
2718+
* @brief Trace RTIO Completion Queue Event Acquire Exit API
2719+
* @param rtio RTIO context
2720+
* @param cqe Complete Queue Event
2721+
*/
2722+
#define sys_port_trace_rtio_cqe_acquire_exit(rtio, cqe)
2723+
2724+
/**
2725+
* @brief Trace RTIO Completion Queue Event Release API
2726+
* @param rtio RTIO context
2727+
* @param cqe Complete Queue Event
2728+
*/
2729+
#define sys_port_trace_rtio_cqe_release(rtio, cqe)
2730+
2731+
/**
2732+
* @brief Trace RTIO Completion Queue Event Consume Enter API
2733+
* @param rtio RTIO context
2734+
*/
2735+
#define sys_port_trace_rtio_cqe_consume_enter(rtio)
2736+
2737+
/**
2738+
* @brief Trace RTIO Completion Queue Event Consume Exit API
2739+
* @param rtio RTIO context
2740+
* @param cqe Complete Queue Event
2741+
*/
2742+
#define sys_port_trace_rtio_cqe_consume_exit(rtio, cqe)
2743+
2744+
/**
2745+
* @brief Trace RTIO get next transaction Enter API
2746+
* @param rtio RTIO context
2747+
* @param iodev_sqe Current submission queue entry
2748+
*/
2749+
#define sys_port_trace_rtio_txn_next_enter(rtio, iodev_sqe)
2750+
2751+
/**
2752+
* @brief Trace RTIO get next transaction Exit API
2753+
* @param rtio RTIO context
2754+
* @param iodev_sqe Next submission queue entry
2755+
*/
2756+
#define sys_port_trace_rtio_txn_next_exit(rtio, iodev_sqe)
2757+
2758+
/**
2759+
* @brief Trace RTIO get next sqe in chain Enter API
2760+
* @param rtio RTIO context
2761+
* @param iodev_sqe Current submission queue entry
2762+
*/
2763+
#define sys_port_trace_rtio_chain_next_enter(rtio, iodev_sqe)
2764+
2765+
/**
2766+
* @brief Trace RTIO get next sqe in chain Exit API
2767+
* @param rtio RTIO context
2768+
* @param iodev_sqe Next submission queue entry
2769+
*/
2770+
#define sys_port_trace_rtio_chain_next_exit(rtio, iodev_sqe)
2771+
2772+
2773+
/** @} */ /* end of subsys_tracing_apis_rtio */
2774+
26592775
#if defined(CONFIG_PERCEPIO_TRACERECORDER)
26602776
#include "tracing_tracerecorder.h"
26612777

subsys/tracing/ctf/tracing_ctf.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,6 +857,23 @@ void sys_trace_gpio_fire_callback(const struct device *port, struct gpio_callbac
857857
sys_trace_gpio_fire_callbacks_enter(list, port, pins)
858858
#define sys_port_trace_gpio_fire_callback(port, cb) sys_trace_gpio_fire_callback(port, cb)
859859

860+
#define sys_port_trace_rtio_submit_enter(rtio, wait_count)
861+
#define sys_port_trace_rtio_submit_exit(rtio)
862+
#define sys_port_trace_rtio_sqe_acquire_enter(rtio)
863+
#define sys_port_trace_rtio_sqe_acquire_exit(rtio, sqe)
864+
#define sys_port_trace_rtio_sqe_cancel(sqe)
865+
#define sys_port_trace_rtio_cqe_submit_enter(rtio, result, flags)
866+
#define sys_port_trace_rtio_cqe_submit_exit(rtio)
867+
#define sys_port_trace_rtio_cqe_acquire_enter(rtio)
868+
#define sys_port_trace_rtio_cqe_acquire_exit(rtio, cqe)
869+
#define sys_port_trace_rtio_cqe_release(rtio, cqe)
870+
#define sys_port_trace_rtio_cqe_consume_enter(rtio)
871+
#define sys_port_trace_rtio_cqe_consume_exit(rtio, cqe)
872+
#define sys_port_trace_rtio_txn_next_enter(rtio, iodev_sqe)
873+
#define sys_port_trace_rtio_txn_next_exit(rtio, iodev_sqe)
874+
#define sys_port_trace_rtio_chain_next_enter(rtio, iodev_sqe)
875+
#define sys_port_trace_rtio_chain_next_exit(rtio, iodev_sqe)
876+
860877
#ifdef __cplusplus
861878
}
862879
#endif

subsys/tracing/sysview/tracing_sysview.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,23 @@ void sys_trace_named_event(const char *name, uint32_t arg0, uint32_t arg1);
859859
#define sys_port_trace_gpio_fire_callbacks_enter(list, port, pins)
860860
#define sys_port_trace_gpio_fire_callback(port, cb)
861861

862+
#define sys_port_trace_rtio_submit_enter(rtio, wait_count)
863+
#define sys_port_trace_rtio_submit_exit(rtio)
864+
#define sys_port_trace_rtio_sqe_acquire_enter(rtio)
865+
#define sys_port_trace_rtio_sqe_acquire_exit(rtio, sqe)
866+
#define sys_port_trace_rtio_sqe_cancel(sqe)
867+
#define sys_port_trace_rtio_cqe_submit_enter(rtio, result, flags)
868+
#define sys_port_trace_rtio_cqe_submit_exit(rtio)
869+
#define sys_port_trace_rtio_cqe_acquire_enter(rtio)
870+
#define sys_port_trace_rtio_cqe_acquire_exit(rtio, cqe)
871+
#define sys_port_trace_rtio_cqe_release(rtio, cqe)
872+
#define sys_port_trace_rtio_cqe_consume_enter(rtio)
873+
#define sys_port_trace_rtio_cqe_consume_exit(rtio, cqe)
874+
#define sys_port_trace_rtio_txn_next_enter(rtio, iodev_sqe)
875+
#define sys_port_trace_rtio_txn_next_exit(rtio, iodev_sqe)
876+
#define sys_port_trace_rtio_chain_next_enter(rtio, iodev_sqe)
877+
#define sys_port_trace_rtio_chain_next_exit(rtio, iodev_sqe)
878+
862879
#ifdef __cplusplus
863880
}
864881
#endif

subsys/tracing/test/tracing_test.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,4 +782,21 @@ void sys_trace_k_event_wait_exit(struct k_event *event, uint32_t events, uint32_
782782
#define sys_port_trace_gpio_fire_callbacks_enter(list, port, pins)
783783
#define sys_port_trace_gpio_fire_callback(port, cb)
784784

785+
#define sys_port_trace_rtio_submit_enter(rtio, wait_count)
786+
#define sys_port_trace_rtio_submit_exit(rtio)
787+
#define sys_port_trace_rtio_sqe_acquire_enter(rtio)
788+
#define sys_port_trace_rtio_sqe_acquire_exit(rtio, sqe)
789+
#define sys_port_trace_rtio_sqe_cancel(sqe)
790+
#define sys_port_trace_rtio_cqe_submit_enter(rtio, result, flags)
791+
#define sys_port_trace_rtio_cqe_submit_exit(rtio)
792+
#define sys_port_trace_rtio_cqe_acquire_enter(rtio)
793+
#define sys_port_trace_rtio_cqe_acquire_exit(rtio, cqe)
794+
#define sys_port_trace_rtio_cqe_release(rtio, cqe)
795+
#define sys_port_trace_rtio_cqe_consume_enter(rtio)
796+
#define sys_port_trace_rtio_cqe_consume_exit(rtio, cqe)
797+
#define sys_port_trace_rtio_txn_next_enter(rtio, iodev_sqe)
798+
#define sys_port_trace_rtio_txn_next_exit(rtio, iodev_sqe)
799+
#define sys_port_trace_rtio_chain_next_enter(rtio, iodev_sqe)
800+
#define sys_port_trace_rtio_chain_next_exit(rtio, iodev_sqe)
801+
785802
#endif /* ZEPHYR_TRACE_TEST_H */

0 commit comments

Comments
 (0)