Skip to content

Commit 15dc87d

Browse files
ycsinnashif
authored andcommitted
tracing: trace sys_init calls
Created tracing APIs to trace the enter and (exit + result) of SYS_INIT and DEVICE_DT_DEFINE (and friends). Signed-off-by: Yong Cong Sin <[email protected]>
1 parent 3daf69a commit 15dc87d

File tree

7 files changed

+42
-2
lines changed

7 files changed

+42
-2
lines changed

include/zephyr/tracing/tracing.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2348,6 +2348,16 @@ void sys_trace_isr_exit_to_scheduler(void);
23482348
void sys_trace_idle(void);
23492349
#endif /* CONFIG_PERCEPIO_TRACERECORDER */
23502350

2351+
/**
2352+
* @brief Called when entering an init function
2353+
*/
2354+
#define sys_trace_sys_init_enter(entry, level)
2355+
2356+
/**
2357+
* @brief Called when exiting an init function
2358+
*/
2359+
#define sys_trace_sys_init_exit(entry, level, result)
2360+
23512361
/** @} */ /* end of subsys_tracing_apis */
23522362

23532363
/** @} */ /* end of subsys_tracing */

kernel/init.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,12 +363,15 @@ static void z_sys_init_run_level(enum init_level level)
363363

364364
for (entry = levels[level]; entry < levels[level+1]; entry++) {
365365
const struct device *dev = entry->dev;
366+
int result;
366367

368+
sys_trace_sys_init_enter(entry, level);
367369
if (dev != NULL) {
368-
do_device_init(entry);
370+
result = do_device_init(entry);
369371
} else {
370-
(void)entry->init_fn.sys();
372+
result = entry->init_fn.sys();
371373
}
374+
sys_trace_sys_init_exit(entry, level, result);
372375
}
373376
}
374377

subsys/tracing/ctf/tracing_ctf.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,9 @@ extern "C" {
349349
#define sys_port_trace_pm_device_runtime_disable_enter(dev)
350350
#define sys_port_trace_pm_device_runtime_disable_exit(dev, ret)
351351

352+
#define sys_trace_sys_init_enter(...)
353+
#define sys_trace_sys_init_exit(...)
354+
352355
void sys_trace_idle(void);
353356
void sys_trace_isr_enter(void);
354357
void sys_trace_isr_exit(void);

subsys/tracing/sysview/tracing_sysview.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,9 @@ void sys_trace_k_thread_info(struct k_thread *thread);
675675
SEGGER_SYSVIEW_RecordEndCallU32(TID_PM_DEVICE_RUNTIME_DISABLE, \
676676
(uint32_t)ret)
677677

678+
#define sys_trace_sys_init_enter(...)
679+
#define sys_trace_sys_init_exit(...)
680+
678681
#ifdef __cplusplus
679682
}
680683
#endif

subsys/tracing/test/tracing_test.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,4 +732,7 @@ void sys_trace_k_event_init(struct k_event *event);
732732
#define sys_port_trace_socket_socketpair_enter(family, type, proto, sv)
733733
#define sys_port_trace_socket_socketpair_exit(sockA, sockB, ret)
734734

735+
#define sys_trace_sys_init_enter(...)
736+
#define sys_trace_sys_init_exit(...)
737+
735738
#endif /* ZEPHYR_TRACE_TEST_H */

subsys/tracing/user/tracing_user.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include <tracing_user.h>
99
#include <zephyr/kernel.h>
10+
#include <zephyr/init.h>
1011

1112
void __weak sys_trace_thread_create_user(struct k_thread *thread) {}
1213
void __weak sys_trace_thread_abort_user(struct k_thread *thread) {}
@@ -22,6 +23,8 @@ void __weak sys_trace_thread_priority_set_user(struct k_thread *thread, int prio
2223
void __weak sys_trace_isr_enter_user(void) {}
2324
void __weak sys_trace_isr_exit_user(void) {}
2425
void __weak sys_trace_idle_user(void) {}
26+
void __weak sys_trace_sys_init_enter_user(const struct init_entry *entry, int level) {}
27+
void __weak sys_trace_sys_init_exit_user(const struct init_entry *entry, int level, int result) {}
2528

2629
void sys_trace_thread_create(struct k_thread *thread)
2730
{
@@ -92,3 +95,13 @@ void sys_trace_idle(void)
9295
{
9396
sys_trace_idle_user();
9497
}
98+
99+
void sys_trace_sys_init_enter(const struct init_entry *entry, int level)
100+
{
101+
sys_trace_sys_init_enter_user(entry, level);
102+
}
103+
104+
void sys_trace_sys_init_exit(const struct init_entry *entry, int level, int result)
105+
{
106+
sys_trace_sys_init_exit_user(entry, level, result);
107+
}

subsys/tracing/user/tracing_user.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#ifndef _TRACE_USER_H
99
#define _TRACE_USER_H
1010
#include <zephyr/kernel.h>
11+
#include <zephyr/init.h>
1112

1213
#ifdef __cplusplus
1314
extern "C" {
@@ -27,6 +28,8 @@ void sys_trace_thread_pend_user(struct k_thread *thread);
2728
void sys_trace_isr_enter_user(void);
2829
void sys_trace_isr_exit_user(void);
2930
void sys_trace_idle_user(void);
31+
void sys_trace_sys_init_enter_user(const struct init_entry *entry, int level);
32+
void sys_trace_sys_init_exit_user(const struct init_entry *entry, int level, int result);
3033

3134
void sys_trace_thread_create(struct k_thread *thread);
3235
void sys_trace_thread_abort(struct k_thread *thread);
@@ -42,6 +45,8 @@ void sys_trace_thread_pend(struct k_thread *thread);
4245
void sys_trace_isr_enter(void);
4346
void sys_trace_isr_exit(void);
4447
void sys_trace_idle(void);
48+
void sys_trace_sys_init_enter(const struct init_entry *entry, int level);
49+
void sys_trace_sys_init_exit(const struct init_entry *entry, int level, int result);
4550

4651
#define sys_port_trace_k_thread_foreach_enter()
4752
#define sys_port_trace_k_thread_foreach_exit()

0 commit comments

Comments
 (0)