Skip to content

Commit 7771f25

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 7771f25

File tree

3 files changed

+110
-0
lines changed

3 files changed

+110
-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: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,40 @@ New APIs and options
212212

213213
.. zephyr-keep-sorted-stop
214214
215+
216+
Libraries / Subsystems
217+
**********************
218+
219+
* Tracing
220+
221+
* Add the :c:macro:`SYS_PORT_TRACK_FOR_EACH` macro for iterating over
222+
a tracking list.
223+
224+
* Add the following wrapper for the :c:macro:`SYS_PORT_TRACK_NEXT` macro to
225+
provide a more visible way to access the global tracking list:
226+
227+
* :c:macro:`SYS_PORT_TRACK_K_TIMER_NEXT` is equivalent to
228+
``SYS_PORT_TRACK_NEXT(_track_list_k_timer)``.
229+
* :c:macro:`SYS_PORT_TRACK_K_MEM_SLAB_NEXT` is equivalent to
230+
``SYS_PORT_TRACK_NEXT(_track_list_k_mem_slab)``.
231+
* :c:macro:`SYS_PORT_TRACK_K_SEM_NEXT` is equivalent to
232+
``SYS_PORT_TRACK_NEXT(_track_list_k_sem)``.
233+
* :c:macro:`SYS_PORT_TRACK_K_MUTEX_NEXT` is equivalent to
234+
``SYS_PORT_TRACK_NEXT(_track_list_k_mutex)``.
235+
* :c:macro:`SYS_PORT_TRACK_K_STACK_NEXT` is equivalent to
236+
``SYS_PORT_TRACK_NEXT(_track_list_k_stack)``.
237+
* :c:macro:`SYS_PORT_TRACK_K_MSGQ_NEXT` is equivalent to
238+
``SYS_PORT_TRACK_NEXT(_track_list_k_msgq)``.
239+
* :c:macro:`SYS_PORT_TRACK_K_MBOX_NEXT` is equivalent to
240+
``SYS_PORT_TRACK_NEXT(_track_list_k_mbox)``.
241+
* :c:macro:`SYS_PORT_TRACK_K_PIPE_NEXT` is equivalent to
242+
``SYS_PORT_TRACK_NEXT(_track_list_k_pipe)``.
243+
* :c:macro:`SYS_PORT_TRACK_K_QUEUE_NEXT` is equivalent to
244+
``SYS_PORT_TRACK_NEXT(_track_list_k_queue)``.
245+
* :c:macro:`SYS_PORT_TRACK_K_EVENT_NEXT` is equivalent to
246+
``SYS_PORT_TRACK_NEXT(_track_list_k_event)``.
247+
248+
215249
New Boards
216250
**********
217251

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)