diff --git a/.clang-format b/.clang-format index e0982b801cad4..f28e95a989878 100644 --- a/.clang-format +++ b/.clang-format @@ -42,6 +42,7 @@ ForEachMacros: - 'FOR_EACH_FIXED_ARG_NONEMPTY_TERM' - 'RB_FOR_EACH' - 'RB_FOR_EACH_CONTAINER' + - 'SYS_PORT_TRACK_FOR_EACH' - 'SYS_DLIST_FOR_EACH_CONTAINER' - 'SYS_DLIST_FOR_EACH_CONTAINER_SAFE' - 'SYS_DLIST_FOR_EACH_NODE' diff --git a/doc/releases/release-notes-4.3.rst b/doc/releases/release-notes-4.3.rst index 077fd71da8fd9..e260a554065b5 100644 --- a/doc/releases/release-notes-4.3.rst +++ b/doc/releases/release-notes-4.3.rst @@ -321,6 +321,20 @@ New APIs and options * :c:macro:`__deprecated_version` +* Tracing + + * :c:macro:`SYS_PORT_TRACK_FOR_EACH` + * :c:macro:`SYS_PORT_TRACK_K_TIMER_NEXT` + * :c:macro:`SYS_PORT_TRACK_K_MEM_SLAB_NEXT` + * :c:macro:`SYS_PORT_TRACK_K_SEM_NEXT` + * :c:macro:`SYS_PORT_TRACK_K_MUTEX_NEXT` + * :c:macro:`SYS_PORT_TRACK_K_STACK_NEXT` + * :c:macro:`SYS_PORT_TRACK_K_MSGQ_NEXT` + * :c:macro:`SYS_PORT_TRACK_K_MBOX_NEXT` + * :c:macro:`SYS_PORT_TRACK_K_PIPE_NEXT` + * :c:macro:`SYS_PORT_TRACK_K_QUEUE_NEXT` + * :c:macro:`SYS_PORT_TRACK_K_EVENT_NEXT` + * USB * Video diff --git a/include/zephyr/tracing/tracking.h b/include/zephyr/tracing/tracking.h index d8128988a6360..0520a3725df3e 100644 --- a/include/zephyr/tracing/tracking.h +++ b/include/zephyr/tracing/tracking.h @@ -70,9 +70,105 @@ extern struct k_event *_track_list_k_event; * @brief Gets node's next element in a object tracking list. * * @param list Node to get next element from. + * @return The next item under @p list. */ #define SYS_PORT_TRACK_NEXT(list)((list)->_obj_track_next) +/** + * @brief Gets node's next element in a object tracking list. + * + * Example: + * SYS_PORT_TRACK_FOREACH(k_mutex, m) { + * ... + * } + * + * @param object Type of tracking object to iterate over. + * @param var Temporary variable used during iteration. + */ +#define SYS_PORT_TRACK_FOR_EACH(object, var) \ + for (struct object *var = _track_list_##object \ + ; var != NULL; var++) + +/** + * @brief Gets node's next element in a k_timer tracking list. + * + * @return The next item under list @ref _track_list_k_timer + */ +#define SYS_PORT_TRACK_K_TIMER_NEXT() \ + SYS_PORT_TRACK_NEXT(_track_list_k_timer) + +/** + * @brief Gets node's next element in a k_mem_slab tracking list. + * + * @return The next item under list @ref _track_list_k_mem_slab + */ +#define SYS_PORT_TRACK_K_MEM_SLAB_NEXT() \ + SYS_PORT_TRACK_NEXT(_track_list_k_mem_slab) + +/** + * @brief Gets node's next element in a k_sem tracking list. + * + * @return The next item under list @ref _track_list_k_sem + */ +#define SYS_PORT_TRACK_K_SEM_NEXT() \ + SYS_PORT_TRACK_NEXT(_track_list_k_sem) + +/** + * @brief Gets node's next element in a k_mutex tracking list. + * + * @return The next item under list @ref _track_list_k_mutex + */ +#define SYS_PORT_TRACK_K_MUTEX_NEXT() \ + SYS_PORT_TRACK_NEXT(_track_list_k_mutex) + +/** + * @brief Gets node's next element in a k_stack tracking list. + * + * @return The next item under list @ref _track_list_k_stack + */ +#define SYS_PORT_TRACK_K_STACK_NEXT() \ + SYS_PORT_TRACK_NEXT(_track_list_k_stack) + +/** + * @brief Gets node's next element in a k_msgq tracking list. + * + * @return The next item under list @ref _track_list_k_msgq + */ +#define SYS_PORT_TRACK_K_MSGQ_NEXT() \ + SYS_PORT_TRACK_NEXT(_track_list_k_msgq) + +/** + * @brief Gets node's next element in a k_mbox tracking list. + * + * @return The next item under list @ref _track_list_k_mbox + */ +#define SYS_PORT_TRACK_K_MBOX_NEXT() \ + SYS_PORT_TRACK_NEXT(_track_list_k_mbox) + +/** + * @brief Gets node's next element in a k_pipe tracking list. + * + * @return The next item under list @ref _track_list_k_pipe + */ +#define SYS_PORT_TRACK_K_PIPE_NEXT() \ + SYS_PORT_TRACK_NEXT(_track_list_k_pipe) + +/** + * @brief Gets node's next element in a k_queue tracking list. + * + * @return The next item under list @ref _track_list_k_queue + */ +#define SYS_PORT_TRACK_K_QUEUE_NEXT() \ + SYS_PORT_TRACK_NEXT(_track_list_k_queue) + +/** + * @brief Gets node's next element in a k_event tracking list. + * + * @return The next item under list @ref _track_list_k_event + */ +#define SYS_PORT_TRACK_K_EVENT_NEXT() \ + SYS_PORT_TRACK_NEXT(_track_list_k_event) + /** @cond INTERNAL_HIDDEN */ #define sys_port_track_k_thread_start(thread)