From 83ae27bb88d805a635e41c28e942357676866efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20Leksell?= Date: Fri, 26 Mar 2021 11:42:16 +0100 Subject: [PATCH] Tracing: FIFO Tracing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add FIFO tracing hook, default hooks, and documentation. Signed-off-by: Torbjörn Leksell --- include/kernel.h | 58 +++++++++++++--- include/tracing/tracing.h | 138 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 187 insertions(+), 9 deletions(-) diff --git a/include/kernel.h b/include/kernel.h index 2ff9b803cd9..d13e93866a3 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -2055,7 +2055,11 @@ struct k_fifo { * @return N/A */ #define k_fifo_init(fifo) \ - k_queue_init(&(fifo)->_queue) + ({ \ + SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_fifo, init, fifo); \ + k_queue_init(&(fifo)->_queue); \ + SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_fifo, init, fifo); \ + }) /** * @brief Cancel waiting on a FIFO queue. @@ -2071,7 +2075,11 @@ struct k_fifo { * @return N/A */ #define k_fifo_cancel_wait(fifo) \ - k_queue_cancel_wait(&(fifo)->_queue) + ({ \ + SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_fifo, cancel_wait, fifo); \ + k_queue_cancel_wait(&(fifo)->_queue); \ + SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_fifo, cancel_wait, fifo); \ + }) /** * @brief Add an element to a FIFO queue. @@ -2088,7 +2096,11 @@ struct k_fifo { * @return N/A */ #define k_fifo_put(fifo, data) \ - k_queue_append(&(fifo)->_queue, data) + ({ \ + SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_fifo, put, fifo, data); \ + k_queue_append(&(fifo)->_queue, data); \ + SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_fifo, put, fifo, data); \ + }) /** * @brief Add an element to a FIFO queue. @@ -2107,7 +2119,12 @@ struct k_fifo { * @retval -ENOMEM if there isn't sufficient RAM in the caller's resource pool */ #define k_fifo_alloc_put(fifo, data) \ - k_queue_alloc_append(&(fifo)->_queue, data) + ({ \ + SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_fifo, alloc_put, fifo, data); \ + int ret = k_queue_alloc_append(&(fifo)->_queue, data); \ + SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_fifo, alloc_put, fifo, data, ret); \ + ret; \ + }) /** * @brief Atomically add a list of elements to a FIFO. @@ -2126,7 +2143,11 @@ struct k_fifo { * @return N/A */ #define k_fifo_put_list(fifo, head, tail) \ - k_queue_append_list(&(fifo)->_queue, head, tail) + ({ \ + SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_fifo, put_list, fifo, head, tail); \ + k_queue_append_list(&(fifo)->_queue, head, tail); \ + SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_fifo, put_list, fifo, head, tail); \ + }) /** * @brief Atomically add a list of elements to a FIFO queue. @@ -2144,7 +2165,11 @@ struct k_fifo { * @return N/A */ #define k_fifo_put_slist(fifo, list) \ - k_queue_merge_slist(&(fifo)->_queue, list) + ({ \ + SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_fifo, put_slist, fifo, list); \ + k_queue_merge_slist(&(fifo)->_queue, list); \ + SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_fifo, put_slist, fifo, list); \ + }) /** * @brief Get an element from a FIFO queue. @@ -2164,7 +2189,12 @@ struct k_fifo { * without waiting, or waiting period timed out. */ #define k_fifo_get(fifo, timeout) \ - k_queue_get(&(fifo)->_queue, timeout) + ({ \ + SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_fifo, get, fifo, timeout); \ + void *ret = k_queue_get(&(fifo)->_queue, timeout); \ + SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_fifo, get, fifo, timeout, ret); \ + ret; \ + }) /** * @brief Query a FIFO queue to see if it has data available. @@ -2196,7 +2226,12 @@ struct k_fifo { * @return Head element, or NULL if the FIFO queue is empty. */ #define k_fifo_peek_head(fifo) \ - k_queue_peek_head(&(fifo)->_queue) + ({ \ + SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_fifo, peek_head, fifo); \ + void *ret = k_queue_peek_head(&(fifo)->_queue); \ + SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_fifo, peek_head, fifo, ret); \ + ret; \ + }) /** * @brief Peek element at the tail of FIFO queue. @@ -2210,7 +2245,12 @@ struct k_fifo { * @return Tail element, or NULL if a FIFO queue is empty. */ #define k_fifo_peek_tail(fifo) \ - k_queue_peek_tail(&(fifo)->_queue) + ({ \ + SYS_PORT_TRACING_OBJ_FUNC_ENTER(k_fifo, peek_tail, fifo); \ + void *ret = k_queue_peek_tail(&(fifo)->_queue); \ + SYS_PORT_TRACING_OBJ_FUNC_EXIT(k_fifo, peek_tail, fifo, ret); \ + ret; \ + }) /** * @brief Statically define and initialize a FIFO queue. diff --git a/include/tracing/tracing.h b/include/tracing/tracing.h index 17ef1448d5d..467a401c42f 100644 --- a/include/tracing/tracing.h +++ b/include/tracing/tracing.h @@ -701,6 +701,144 @@ */ /* end of queue_tracing_apis */ + + +/** + * @brief FIFO Tracing APIs + * @defgroup fifo_tracing_apis FIFO Tracing APIs + * @ingroup tracing_apis + * @{ + */ + +/** + * @brief Trace initialization of FIFO Queue entry + * @param fifo FIFO object + */ +#define sys_port_trace_k_fifo_init_enter(fifo) + +/** + * @brief Trace initialization of FIFO Queue exit + * @param fifo FIFO object + */ +#define sys_port_trace_k_fifo_init_exit(fifo) + +/** + * @brief Trace FIFO Queue cancel wait entry + * @param fifo FIFO object + */ +#define sys_port_trace_k_fifo_cancel_wait_enter(fifo) + +/** + * @brief Trace FIFO Queue cancel wait exit + * @param fifo FIFO object + */ +#define sys_port_trace_k_fifo_cancel_wait_exit(fifo) + +/** + * @brief Trace FIFO Queue put entry + * @param fifo FIFO object + * @param data Data item + */ +#define sys_port_trace_k_fifo_put_enter(fifo, data) + +/** + * @brief Trace FIFO Queue put exit + * @param fifo FIFO object + * @param data Data item + */ +#define sys_port_trace_k_fifo_put_exit(fifo, data) + +/** + * @brief Trace FIFO Queue alloc put entry + * @param fifo FIFO object + * @param data Data item + */ +#define sys_port_trace_k_fifo_alloc_put_enter(fifo, data) + +/** + * @brief Trace FIFO Queue alloc put exit + * @param fifo FIFO object + * @param data Data item + * @param ret Return value + */ +#define sys_port_trace_k_fifo_alloc_put_exit(fifo, data, ret) + +/** + * @brief Trace FIFO Queue put list entry + * @param fifo FIFO object + * @param head First ll-node + * @param tail Last ll-node + */ +#define sys_port_trace_k_fifo_alloc_put_list_enter(fifo, head, tail) + +/** + * @brief Trace FIFO Queue put list exit + * @param fifo FIFO object + * @param head First ll-node + * @param tail Last ll-node + */ +#define sys_port_trace_k_fifo_alloc_put_list_exit(fifo, head, tail) + +/** + * @brief Trace FIFO Queue put slist entry + * @param fifo FIFO object + * @param list Syslist object + */ +#define sys_port_trace_k_fifo_alloc_put_slist_enter(fifo, list) + +/** + * @brief Trace FIFO Queue put slist exit + * @param fifo FIFO object + * @param list Syslist object + */ +#define sys_port_trace_k_fifo_alloc_put_slist_exit(fifo, list) + +/** + * @brief Trace FIFO Queue get entry + * @param fifo FIFO object + * @param timeout Timeout period + */ +#define sys_port_trace_k_fifo_get_enter(fifo, timeout) + +/** + * @brief Trace FIFO Queue get exit + * @param fifo FIFO object + * @param timeout Timeout period + * @param ret Return value + */ +#define sys_port_trace_k_fifo_get_exit(fifo, timeout, ret) + +/** + * @brief Trace FIFO Queue peek head entry + * @param fifo FIFO object + */ +#define sys_port_trace_k_fifo_peek_head_entry(fifo) + +/** + * @brief Trace FIFO Queue peek head exit + * @param fifo FIFO object + * @param ret Return value + */ +#define sys_port_trace_k_fifo_peek_head_exit(fifo, ret) + +/** + * @brief Trace FIFO Queue peek tail entry + * @param fifo FIFO object + */ +#define sys_port_trace_k_fifo_peek_tail_entry(fifo) + +/** + * @brief Trace FIFO Queue peek tail exit + * @param fifo FIFO object + * @param ret Return value + */ +#define sys_port_trace_k_fifo_peek_tail_exit(fifo, ret) + +/** + * @} + */ /* end of fifo_tracing_apis */ + + /** * @} */