Skip to content

Commit ed78439

Browse files
committed
subsystem: tracing: Add macros for tracking list operations
Add a set of `SYS_PORT_TRACK_K_*` wrapper macros for visible access to the global tracking list, and a macro `SYS_PORT_TRACK_FOR_EACH` for iterating over the tracking list. Signed-off-by: James Roy <[email protected]>
1 parent 1c15986 commit ed78439

File tree

3 files changed

+91
-0
lines changed

3 files changed

+91
-0
lines changed

.clang-format

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ ForEachMacros:
4242
- 'FOR_EACH_FIXED_ARG_NONEMPTY_TERM'
4343
- 'RB_FOR_EACH'
4444
- 'RB_FOR_EACH_CONTAINER'
45+
- 'SYS_PORT_TRACK_FOR_EACH'
4546
- 'SYS_DLIST_FOR_EACH_CONTAINER'
4647
- 'SYS_DLIST_FOR_EACH_CONTAINER_SAFE'
4748
- 'SYS_DLIST_FOR_EACH_NODE'

doc/releases/release-notes-4.3.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,23 @@ New APIs and options
210210

211211
* :kconfig:option:`CONFIG_TASK_WDT_DUMMY`
212212

213+
* Tracing
214+
215+
* :c:macro:`SYS_PORT_TRACK_FOR_EACH`
216+
* :c:macro:`SYS_PORT_TRACK_K_TIMER_NEXT`
217+
* :c:macro:`SYS_PORT_TRACK_K_MEM_SLAB_NEXT`
218+
* :c:macro:`SYS_PORT_TRACK_K_SEM_NEXT`
219+
* :c:macro:`SYS_PORT_TRACK_K_MUTEX_NEXT`
220+
* :c:macro:`SYS_PORT_TRACK_K_STACK_NEXT`
221+
* :c:macro:`SYS_PORT_TRACK_K_MSGQ_NEXT`
222+
* :c:macro:`SYS_PORT_TRACK_K_MBOX_NEXT`
223+
* :c:macro:`SYS_PORT_TRACK_K_PIPE_NEXT`
224+
* :c:macro:`SYS_PORT_TRACK_K_QUEUE_NEXT`
225+
* :c:macro:`SYS_PORT_TRACK_K_EVENT_NEXT`
226+
213227
.. zephyr-keep-sorted-stop
214228
229+
215230
New Boards
216231
**********
217232

include/zephyr/tracing/tracking.h

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,81 @@ extern struct k_event *_track_list_k_event;
5252
*/
5353
#define SYS_PORT_TRACK_NEXT(list)((list)->_obj_track_next)
5454

55+
/**
56+
* @brief Gets node's next element in a object tracking list.
57+
*
58+
* Example:
59+
* SYS_PORT_TRACK_FOREACH(k_mutex, m) {
60+
* ...
61+
* }
62+
*
63+
* @param object Type of tracking object to iterate over.
64+
* @param var Temporary variable used during iteration.
65+
*/
66+
#define SYS_PORT_TRACK_FOR_EACH(object, var) \
67+
for (struct object *var = _track_list_##object \
68+
; var != NULL; var++)
69+
70+
/**
71+
* @brief Gets node's next element in a k_timer tracking list.
72+
*/
73+
#define SYS_PORT_TRACK_K_TIMER_NEXT() \
74+
SYS_PORT_TRACK_NEXT(_track_list_k_timer)
75+
76+
/**
77+
* @brief Gets node's next element in a k_mem_slab tracking list.
78+
*/
79+
#define SYS_PORT_TRACK_K_MEM_SLAB_NEXT() \
80+
SYS_PORT_TRACK_NEXT(_track_list_k_mem_slab)
81+
82+
/**
83+
* @brief Gets node's next element in a k_sem tracking list.
84+
*/
85+
#define SYS_PORT_TRACK_K_SEM_NEXT() \
86+
SYS_PORT_TRACK_NEXT(_track_list_k_sem)
87+
88+
/**
89+
* @brief Gets node's next element in a k_mutex tracking list.
90+
*/
91+
#define SYS_PORT_TRACK_K_MUTEX_NEXT() \
92+
SYS_PORT_TRACK_NEXT(_track_list_k_mutex)
93+
94+
/**
95+
* @brief Gets node's next element in a k_stack tracking list.
96+
*/
97+
#define SYS_PORT_TRACK_K_STACK_NEXT() \
98+
SYS_PORT_TRACK_NEXT(_track_list_k_stack)
99+
100+
/**
101+
* @brief Gets node's next element in a k_msgq tracking list.
102+
*/
103+
#define SYS_PORT_TRACK_K_MSGQ_NEXT() \
104+
SYS_PORT_TRACK_NEXT(_track_list_k_msgq)
105+
106+
/**
107+
* @brief Gets node's next element in a k_mbox tracking list.
108+
*/
109+
#define SYS_PORT_TRACK_K_MBOX_NEXT() \
110+
SYS_PORT_TRACK_NEXT(_track_list_k_mbox)
111+
112+
/**
113+
* @brief Gets node's next element in a k_pipe tracking list.
114+
*/
115+
#define SYS_PORT_TRACK_K_PIPE_NEXT() \
116+
SYS_PORT_TRACK_NEXT(_track_list_k_pipe)
117+
118+
/**
119+
* @brief Gets node's next element in a k_queue tracking list.
120+
*/
121+
#define SYS_PORT_TRACK_K_QUEUE_NEXT() \
122+
SYS_PORT_TRACK_NEXT(_track_list_k_queue)
123+
124+
/**
125+
* @brief Gets node's next element in a k_event tracking list.
126+
*/
127+
#define SYS_PORT_TRACK_K_EVENT_NEXT() \
128+
SYS_PORT_TRACK_NEXT(_track_list_k_event)
129+
55130
/** @cond INTERNAL_HIDDEN */
56131

57132
#define sys_port_track_k_thread_start(thread)

0 commit comments

Comments
 (0)