Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions include/zephyr/rtio/rtio.h
Original file line number Diff line number Diff line change
Expand Up @@ -1053,9 +1053,12 @@ static inline uint32_t rtio_sqe_acquirable(struct rtio *r)
*/
static inline struct rtio_iodev_sqe *rtio_txn_next(const struct rtio_iodev_sqe *iodev_sqe)
{
SYS_PORT_TRACING_FUNC_ENTER(rtio, txn_next, iodev_sqe->r, iodev_sqe);
if (iodev_sqe->sqe.flags & RTIO_SQE_TRANSACTION) {
SYS_PORT_TRACING_FUNC_EXIT(rtio, txn_next, iodev_sqe->r, iodev_sqe->next);
return iodev_sqe->next;
} else {
SYS_PORT_TRACING_FUNC_EXIT(rtio, txn_next, iodev_sqe->r, NULL);
return NULL;
}
}
Expand All @@ -1071,9 +1074,12 @@ static inline struct rtio_iodev_sqe *rtio_txn_next(const struct rtio_iodev_sqe *
*/
static inline struct rtio_iodev_sqe *rtio_chain_next(const struct rtio_iodev_sqe *iodev_sqe)
{
SYS_PORT_TRACING_FUNC_ENTER(rtio, txn_next, iodev_sqe->r, iodev_sqe);
if (iodev_sqe->sqe.flags & RTIO_SQE_CHAINED) {
SYS_PORT_TRACING_FUNC_EXIT(rtio, txn_next, iodev_sqe->r, iodev_sqe->next);
return iodev_sqe->next;
} else {
SYS_PORT_TRACING_FUNC_EXIT(rtio, txn_next, iodev_sqe->r, NULL);
return NULL;
}
}
Expand Down Expand Up @@ -1101,14 +1107,17 @@ static inline struct rtio_iodev_sqe *rtio_iodev_sqe_next(const struct rtio_iodev
*/
static inline struct rtio_sqe *rtio_sqe_acquire(struct rtio *r)
{
SYS_PORT_TRACING_FUNC_ENTER(rtio, sqe_acquire, r);
struct rtio_iodev_sqe *iodev_sqe = rtio_sqe_pool_alloc(r->sqe_pool);

if (iodev_sqe == NULL) {
SYS_PORT_TRACING_FUNC_EXIT(rtio, sqe_acquire, r, NULL);
return NULL;
}

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

SYS_PORT_TRACING_FUNC_EXIT(rtio, sqe_acquire, r, &iodev_sqe->sqe);
return &iodev_sqe->sqe;
}

Expand All @@ -1134,14 +1143,17 @@ static inline void rtio_sqe_drop_all(struct rtio *r)
*/
static inline struct rtio_cqe *rtio_cqe_acquire(struct rtio *r)
{
SYS_PORT_TRACING_FUNC_ENTER(rtio, cqe_acquire, r);
struct rtio_cqe *cqe = rtio_cqe_pool_alloc(r->cqe_pool);

if (cqe == NULL) {
SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_acquire, r, NULL);
return NULL;
}

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

SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_acquire, r, cqe);
return cqe;
}

Expand All @@ -1166,21 +1178,25 @@ static inline void rtio_cqe_produce(struct rtio *r, struct rtio_cqe *cqe)
*/
static inline struct rtio_cqe *rtio_cqe_consume(struct rtio *r)
{
SYS_PORT_TRACING_FUNC_ENTER(rtio, cqe_consume, r);
struct mpsc_node *node;
struct rtio_cqe *cqe = NULL;

#ifdef CONFIG_RTIO_CONSUME_SEM
if (k_sem_take(r->consume_sem, K_NO_WAIT) != 0) {
SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_consume, r, NULL);
return NULL;
}
#endif

node = mpsc_pop(&r->cq);
if (node == NULL) {
SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_consume, r, NULL);
return NULL;
}
cqe = CONTAINER_OF(node, struct rtio_cqe, q);

SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_consume, r, cqe);
return cqe;
}

Expand Down Expand Up @@ -1220,6 +1236,7 @@ static inline struct rtio_cqe *rtio_cqe_consume_block(struct rtio *r)
*/
static inline void rtio_cqe_release(struct rtio *r, struct rtio_cqe *cqe)
{
SYS_PORT_TRACING_FUNC(rtio, cqe_release, r, cqe);
rtio_cqe_pool_free(r->cqe_pool, cqe);
}

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

if (cqe == NULL) {
Expand Down Expand Up @@ -1406,6 +1424,7 @@ static inline void rtio_cqe_submit(struct rtio *r, int result, void *userdata, u
}
}
#endif
SYS_PORT_TRACING_FUNC_EXIT(rtio, cqe_submit, r);
}

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

static inline int z_impl_rtio_sqe_cancel(struct rtio_sqe *sqe)
{
SYS_PORT_TRACING_FUNC(rtio, sqe_cancel, sqe);
struct rtio_iodev_sqe *iodev_sqe = CONTAINER_OF(sqe, struct rtio_iodev_sqe, sqe);

do {
Expand Down Expand Up @@ -1724,6 +1744,7 @@ __syscall int rtio_submit(struct rtio *r, uint32_t wait_count);
#ifdef CONFIG_RTIO_SUBMIT_SEM
static inline int z_impl_rtio_submit(struct rtio *r, uint32_t wait_count)
{
SYS_PORT_TRACING_FUNC_ENTER(rtio, submit, r, wait_count);
int res = 0;

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

SYS_PORT_TRACING_FUNC_EXIT(rtio, submit, r);
return res;
}
#else
static inline int z_impl_rtio_submit(struct rtio *r, uint32_t wait_count)
{

SYS_PORT_TRACING_FUNC_ENTER(rtio, submit, rtio, wait_count);
int res = 0;
uintptr_t cq_count = (uintptr_t)atomic_get(&r->cq_count);
uintptr_t cq_complete_count = cq_count + wait_count;
Expand All @@ -1767,6 +1790,7 @@ static inline int z_impl_rtio_submit(struct rtio *r, uint32_t wait_count)
k_yield();
}

SYS_PORT_TRACING_FUNC_EXIT(rtio, submit, r);
return res;
}
#endif /* CONFIG_RTIO_SUBMIT_SEM */
Expand Down
115 changes: 115 additions & 0 deletions include/zephyr/tracing/tracing.h
Original file line number Diff line number Diff line change
Expand Up @@ -2656,6 +2656,121 @@

/** @} */ /* end of subsys_tracing_apis_gpio */

/**
* @brief RTIO Tracing APIs
* @defgroup subsys_tracing_apis_rtio RTIO Tracing APIs
* @{
*/

/**
* @brief Trace RTIO Submit Enter API
* @param rtio RTIO context
* @param wait_count Number of submissions to wait for completion of.
*/
#define sys_port_trace_rtio_submit_enter(rtio, wait_count)

/**
* @brief Trace RTIO Submit Exit API
* @param rtio RTIO context
*/
#define sys_port_trace_rtio_submit_exit(rtio)

/**
* @brief Trace RTIO Submission Queue Event Acquire Enter API
* @param rtio RTIO context
*/
#define sys_port_trace_rtio_sqe_acquire_enter(rtio)

/**
* @brief Trace RTIO Submission Queue Event Acquire Exit API
* @param rtio RTIO context
* @param sqe Submission Queue Event
*/
#define sys_port_trace_rtio_sqe_acquire_exit(rtio, sqe)

/**
* @brief Trace RTIO Submission Queue Event Cancel API
* @param sqe Submission Queue Event
*/
#define sys_port_trace_rtio_sqe_cancel(sqe)

/**
* @brief Trace RTIO Completion Queue Event Submit Enter API
* @param rtio RTIO context
* @param result Integer result code (could be -errno)
* @param flags Flags to use for the CQE see RTIO_CQE_FLAG_*
*/
#define sys_port_trace_rtio_cqe_submit_enter(rtio, result, flags)

/**
* @brief Trace RTIO Completion Queue Event Submit Exit API
* @param rtio RTIO context
*/
#define sys_port_trace_rtio_cqe_submit_exit(rtio)

/**
* @brief Trace RTIO Completion Queue Event Acquire Enter API
* @param rtio RTIO context
*/
#define sys_port_trace_rtio_cqe_acquire_enter(rtio)

/**
* @brief Trace RTIO Completion Queue Event Acquire Exit API
* @param rtio RTIO context
* @param cqe Complete Queue Event
*/
#define sys_port_trace_rtio_cqe_acquire_exit(rtio, cqe)

/**
* @brief Trace RTIO Completion Queue Event Release API
* @param rtio RTIO context
* @param cqe Complete Queue Event
*/
#define sys_port_trace_rtio_cqe_release(rtio, cqe)

/**
* @brief Trace RTIO Completion Queue Event Consume Enter API
* @param rtio RTIO context
*/
#define sys_port_trace_rtio_cqe_consume_enter(rtio)

/**
* @brief Trace RTIO Completion Queue Event Consume Exit API
* @param rtio RTIO context
* @param cqe Complete Queue Event
*/
#define sys_port_trace_rtio_cqe_consume_exit(rtio, cqe)

/**
* @brief Trace RTIO get next transaction Enter API
* @param rtio RTIO context
* @param iodev_sqe Current submission queue entry
*/
#define sys_port_trace_rtio_txn_next_enter(rtio, iodev_sqe)

/**
* @brief Trace RTIO get next transaction Exit API
* @param rtio RTIO context
* @param iodev_sqe Next submission queue entry
*/
#define sys_port_trace_rtio_txn_next_exit(rtio, iodev_sqe)

/**
* @brief Trace RTIO get next sqe in chain Enter API
* @param rtio RTIO context
* @param iodev_sqe Current submission queue entry
*/
#define sys_port_trace_rtio_chain_next_enter(rtio, iodev_sqe)

/**
* @brief Trace RTIO get next sqe in chain Exit API
* @param rtio RTIO context
* @param iodev_sqe Next submission queue entry
*/
#define sys_port_trace_rtio_chain_next_exit(rtio, iodev_sqe)

/** @} */ /* end of subsys_tracing_apis_rtio */

#if defined(CONFIG_PERCEPIO_TRACERECORDER)
#include "tracing_tracerecorder.h"

Expand Down
17 changes: 17 additions & 0 deletions subsys/tracing/ctf/tracing_ctf.h
Original file line number Diff line number Diff line change
Expand Up @@ -857,6 +857,23 @@ void sys_trace_gpio_fire_callback(const struct device *port, struct gpio_callbac
sys_trace_gpio_fire_callbacks_enter(list, port, pins)
#define sys_port_trace_gpio_fire_callback(port, cb) sys_trace_gpio_fire_callback(port, cb)

#define sys_port_trace_rtio_submit_enter(rtio, wait_count)
#define sys_port_trace_rtio_submit_exit(rtio)
#define sys_port_trace_rtio_sqe_acquire_enter(rtio)
#define sys_port_trace_rtio_sqe_acquire_exit(rtio, sqe)
#define sys_port_trace_rtio_sqe_cancel(sqe)
#define sys_port_trace_rtio_cqe_submit_enter(rtio, result, flags)
#define sys_port_trace_rtio_cqe_submit_exit(rtio)
#define sys_port_trace_rtio_cqe_acquire_enter(rtio)
#define sys_port_trace_rtio_cqe_acquire_exit(rtio, cqe)
#define sys_port_trace_rtio_cqe_release(rtio, cqe)
#define sys_port_trace_rtio_cqe_consume_enter(rtio)
#define sys_port_trace_rtio_cqe_consume_exit(rtio, cqe)
#define sys_port_trace_rtio_txn_next_enter(rtio, iodev_sqe)
#define sys_port_trace_rtio_txn_next_exit(rtio, iodev_sqe)
#define sys_port_trace_rtio_chain_next_enter(rtio, iodev_sqe)
#define sys_port_trace_rtio_chain_next_exit(rtio, iodev_sqe)

#ifdef __cplusplus
}
#endif
Expand Down
17 changes: 17 additions & 0 deletions subsys/tracing/sysview/tracing_sysview.h
Original file line number Diff line number Diff line change
Expand Up @@ -859,6 +859,23 @@ void sys_trace_named_event(const char *name, uint32_t arg0, uint32_t arg1);
#define sys_port_trace_gpio_fire_callbacks_enter(list, port, pins)
#define sys_port_trace_gpio_fire_callback(port, cb)

#define sys_port_trace_rtio_submit_enter(rtio, wait_count)
#define sys_port_trace_rtio_submit_exit(rtio)
#define sys_port_trace_rtio_sqe_acquire_enter(rtio)
#define sys_port_trace_rtio_sqe_acquire_exit(rtio, sqe)
#define sys_port_trace_rtio_sqe_cancel(sqe)
#define sys_port_trace_rtio_cqe_submit_enter(rtio, result, flags)
#define sys_port_trace_rtio_cqe_submit_exit(rtio)
#define sys_port_trace_rtio_cqe_acquire_enter(rtio)
#define sys_port_trace_rtio_cqe_acquire_exit(rtio, cqe)
#define sys_port_trace_rtio_cqe_release(rtio, cqe)
#define sys_port_trace_rtio_cqe_consume_enter(rtio)
#define sys_port_trace_rtio_cqe_consume_exit(rtio, cqe)
#define sys_port_trace_rtio_txn_next_enter(rtio, iodev_sqe)
#define sys_port_trace_rtio_txn_next_exit(rtio, iodev_sqe)
#define sys_port_trace_rtio_chain_next_enter(rtio, iodev_sqe)
#define sys_port_trace_rtio_chain_next_exit(rtio, iodev_sqe)

#ifdef __cplusplus
}
#endif
Expand Down
17 changes: 17 additions & 0 deletions subsys/tracing/test/tracing_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -782,4 +782,21 @@ void sys_trace_k_event_wait_exit(struct k_event *event, uint32_t events, uint32_
#define sys_port_trace_gpio_fire_callbacks_enter(list, port, pins)
#define sys_port_trace_gpio_fire_callback(port, cb)

#define sys_port_trace_rtio_submit_enter(rtio, wait_count)
#define sys_port_trace_rtio_submit_exit(rtio)
#define sys_port_trace_rtio_sqe_acquire_enter(rtio)
#define sys_port_trace_rtio_sqe_acquire_exit(rtio, sqe)
#define sys_port_trace_rtio_sqe_cancel(sqe)
#define sys_port_trace_rtio_cqe_submit_enter(rtio, result, flags)
#define sys_port_trace_rtio_cqe_submit_exit(rtio)
#define sys_port_trace_rtio_cqe_acquire_enter(rtio)
#define sys_port_trace_rtio_cqe_acquire_exit(rtio, cqe)
#define sys_port_trace_rtio_cqe_release(rtio, cqe)
#define sys_port_trace_rtio_cqe_consume_enter(rtio)
#define sys_port_trace_rtio_cqe_consume_exit(rtio, cqe)
#define sys_port_trace_rtio_txn_next_enter(rtio, iodev_sqe)
#define sys_port_trace_rtio_txn_next_exit(rtio, iodev_sqe)
#define sys_port_trace_rtio_chain_next_enter(rtio, iodev_sqe)
#define sys_port_trace_rtio_chain_next_exit(rtio, iodev_sqe)

#endif /* ZEPHYR_TRACE_TEST_H */
Loading
Loading