Skip to content

Commit 90dfa9a

Browse files
Enter critical section in embassy events
1 parent 3920658 commit 90dfa9a

File tree

1 file changed

+67
-53
lines changed

1 file changed

+67
-53
lines changed

rustmeter-beacon/rustmeter-beacon-target/src/embassy_trace.rs

Lines changed: 67 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -17,86 +17,100 @@ static EXECUTOR_REGISTRY: ExecutorRegistry = ExecutorRegistry::new();
1717

1818
#[unsafe(no_mangle)]
1919
fn _embassy_trace_poll_start(executor_id: u32) {
20-
let payload = EventPayload::EmbassyExecutorPollStart {
21-
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
22-
};
20+
critical_section::with(|_| {
21+
let payload = EventPayload::EmbassyExecutorPollStart {
22+
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
23+
};
2324

24-
write_tracing_event(payload);
25+
write_tracing_event(payload);
26+
});
2527
}
2628

2729
#[unsafe(no_mangle)]
2830
fn _embassy_trace_executor_idle(executor_id: u32) {
29-
let payload = EventPayload::EmbassyExecutorIdle {
30-
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
31-
};
31+
critical_section::with(|_| {
32+
let payload = EventPayload::EmbassyExecutorIdle {
33+
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
34+
};
3235

33-
write_tracing_event(payload);
36+
write_tracing_event(payload);
37+
});
3438
}
3539

3640
#[unsafe(no_mangle)]
3741
fn _embassy_trace_task_new(executor_id: u32, task_id: u32) {
38-
let payload = EventPayload::TypeDefinition(TypeDefinitionPayload::EmbassyTaskCreated {
39-
task_id: task_id,
40-
executor_id_long: executor_id,
41-
executor_id_short: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
42+
critical_section::with(|_| {
43+
let payload = EventPayload::TypeDefinition(TypeDefinitionPayload::EmbassyTaskCreated {
44+
task_id: task_id,
45+
executor_id_long: executor_id,
46+
executor_id_short: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
47+
});
48+
49+
write_tracing_event(payload);
4250
});
43-
44-
write_tracing_event(payload);
4551
}
4652

4753
#[unsafe(no_mangle)]
4854
fn _embassy_trace_task_end(executor_id: u32, task_id: u32) {
49-
let payload = EventPayload::TypeDefinition(TypeDefinitionPayload::EmbassyTaskEnded {
50-
task_id: task_id,
51-
executor_id_long: executor_id,
52-
executor_id_short: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
55+
critical_section::with(|_| {
56+
let payload = EventPayload::TypeDefinition(TypeDefinitionPayload::EmbassyTaskEnded {
57+
task_id: task_id,
58+
executor_id_long: executor_id,
59+
executor_id_short: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
60+
});
61+
62+
write_tracing_event(payload);
5363
});
54-
55-
write_tracing_event(payload);
5664
}
5765

5866
#[unsafe(no_mangle)]
5967
fn _embassy_trace_task_exec_begin(executor_id: u32, task_id: u32) {
60-
let core_id = get_current_core_id();
61-
62-
let payload = match core_id {
63-
0 => EventPayload::EmbassyTaskExecBeginCore0 {
64-
task_id: compressed_task_id(task_id),
65-
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
66-
},
67-
1 => EventPayload::EmbassyTaskExecBeginCore1 {
68-
task_id: compressed_task_id(task_id),
69-
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
70-
},
71-
c => unreachable_core_id(c),
72-
};
73-
74-
write_tracing_event(payload);
68+
critical_section::with(|_| {
69+
let core_id = get_current_core_id();
70+
71+
let payload = match core_id {
72+
0 => EventPayload::EmbassyTaskExecBeginCore0 {
73+
task_id: compressed_task_id(task_id),
74+
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
75+
},
76+
1 => EventPayload::EmbassyTaskExecBeginCore1 {
77+
task_id: compressed_task_id(task_id),
78+
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
79+
},
80+
c => unreachable_core_id(c),
81+
};
82+
83+
write_tracing_event(payload);
84+
});
7585
}
7686

7787
#[unsafe(no_mangle)]
7888
fn _embassy_trace_task_exec_end(executor_id: u32, _task_id: u32) {
79-
let core_id = get_current_core_id();
80-
81-
let payload = match core_id {
82-
0 => EventPayload::EmbassyTaskExecEndCore0 {
83-
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
84-
},
85-
1 => EventPayload::EmbassyTaskExecEndCore1 {
86-
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
87-
},
88-
c => unreachable_core_id(c),
89-
};
90-
91-
write_tracing_event(payload);
89+
critical_section::with(|_| {
90+
let core_id = get_current_core_id();
91+
92+
let payload = match core_id {
93+
0 => EventPayload::EmbassyTaskExecEndCore0 {
94+
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
95+
},
96+
1 => EventPayload::EmbassyTaskExecEndCore1 {
97+
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
98+
},
99+
c => unreachable_core_id(c),
100+
};
101+
102+
write_tracing_event(payload);
103+
});
92104
}
93105

94106
#[unsafe(no_mangle)]
95107
fn _embassy_trace_task_ready_begin(executor_id: u32, task_id: u32) {
96-
let payload = EventPayload::EmbassyTaskReady {
97-
task_id: compressed_task_id(task_id),
98-
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
99-
};
108+
critical_section::with(|_| {
109+
let payload = EventPayload::EmbassyTaskReady {
110+
task_id: compressed_task_id(task_id),
111+
executor_id: EXECUTOR_REGISTRY.lookup_or_register(executor_id).unwrap(),
112+
};
100113

101-
write_tracing_event(payload);
114+
write_tracing_event(payload);
115+
});
102116
}

0 commit comments

Comments
 (0)