Skip to content

Commit d101c3c

Browse files
jamesmunnshawkw
andauthored
Obtain Host Panic/Boot Failure Messages (#2518)
Add MGS API for obtaining Host Crash debugging info. This PR moves the storage of this information to `packrat`, and also now emits ereports when they occur. --------- Co-authored-by: Eliza Weisman <eliza@elizas.website>
1 parent 11f1f5a commit d101c3c

23 files changed

Lines changed: 829 additions & 96 deletions

File tree

Cargo.lock

Lines changed: 11 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/cosmo/base.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,14 @@ notifications = ["i2c1-irq", "i2c2-irq", "i2c3-irq", "i2c4-irq"]
132132
[tasks.packrat]
133133
name = "task-packrat"
134134
priority = 1
135-
stacksize = 1496
135+
stacksize = 1696
136136
start = true
137137
task-slots = ["jefe"]
138138
features = ["cosmo", "ereport"]
139139
notifications = ["task-faulted"]
140140

141141
[tasks.rng_driver]
142-
features = ["h753", "ereport"]
142+
features = ["h753", "packrat"]
143143
name = "drv-stm32h7-rng"
144144
priority = 6
145145
uses = ["rng"]
@@ -258,7 +258,7 @@ features = ["stm32h753", "usart6", "baud_rate_3M", "hardware_flow_control", "vla
258258
uses = ["usart6", "dbgmcu"]
259259
interrupts = {"usart6.irq" = "usart-irq"}
260260
priority = 9
261-
max-sizes = {flash = 74000, ram = 65536}
261+
max-sizes = {flash = 76000, ram = 65536}
262262
stacksize = 7632
263263
start = true
264264
task-slots = ["sys", { cpu_seq = "cosmo_seq" }, "hf", "control_plane_agent", "net", "packrat", "i2c_driver", { spi_driver = "spi2_driver" }, "sprot", "auxflash"]

app/gimlet/base.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ notifications = ["i2c1-irq", "jefe-state-change"]
125125
[tasks.packrat]
126126
name = "task-packrat"
127127
priority = 1
128-
stacksize = 1496
128+
stacksize = 1600
129129
start = true
130130
task-slots = ["jefe"]
131131
features = ["gimlet", "ereport"]
@@ -199,7 +199,7 @@ task-slots = ["sys"]
199199
notifications = ["hash-irq"]
200200

201201
[tasks.rng_driver]
202-
features = ["h753", "ereport"]
202+
features = ["h753", "packrat"]
203203
name = "drv-stm32h7-rng"
204204
priority = 6
205205
uses = ["rng"]
@@ -243,7 +243,7 @@ features = ["stm32h753", "uart7", "baud_rate_3M", "hardware_flow_control", "vlan
243243
uses = ["uart7", "dbgmcu"]
244244
interrupts = {"uart7.irq" = "usart-irq"}
245245
priority = 8
246-
max-sizes = {flash = 72000, ram = 65536}
246+
max-sizes = {flash = 75000, ram = 65536}
247247
stacksize = 7280
248248
start = true
249249
task-slots = ["sys", { cpu_seq = "gimlet_seq" }, "hf", "control_plane_agent", "net", "packrat", "i2c_driver", { spi_driver = "spi2_driver" }, "sprot"]

app/gimletlet/app.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ features = ["vlan"]
206206
notifications = ["socket"]
207207

208208
[tasks.rng_driver]
209-
features = ["h753", "ereport"]
209+
features = ["h753", "packrat"]
210210
task-slots = ["sys", "user_leds", "packrat"]
211211

212212
# VLAN configuration

app/grapefruit/standalone.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ interrupts = {"uart8.irq" = "usart-irq"}
1111

1212
# Ereport stuff
1313
[tasks.packrat]
14-
stacksize = 1496
14+
stacksize = 1600
1515
task-slots = ["jefe"]
1616
features = ["ereport"]
1717
notifications = ["task-faulted"]
@@ -29,7 +29,7 @@ features = ["vlan"]
2929
notifications = ["socket"]
3030

3131
[tasks.rng_driver]
32-
features = ["h753", "ereport"]
32+
features = ["h753", "packrat"]
3333
name = "drv-stm32h7-rng"
3434
priority = 6
3535
uses = ["rng"]

app/observer/base.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ pin = 11
9191
owner = {name = "sequencer", notification = "psu_pwr_ok_5"}
9292

9393
[tasks.rng_driver]
94-
features = ["h753", "ereport"]
94+
features = ["h753", "packrat"]
9595
name = "drv-stm32h7-rng"
9696
priority = 6
9797
uses = ["rng"]

app/psc/base.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ owner = {name = "sequencer", notification = "psu_pwr_ok_6"}
9494

9595

9696
[tasks.rng_driver]
97-
features = ["h753", "ereport"]
97+
features = ["h753", "packrat"]
9898
name = "drv-stm32h7-rng"
9999
priority = 6
100100
uses = ["rng"]

app/sidecar/base.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ pin = 3
5656
owner = {name = "sprot", notification = "rot_irq"}
5757

5858
[tasks.rng_driver]
59-
features = ["h753", "ereport"]
59+
features = ["h753", "packrat"]
6060
name = "drv-stm32h7-rng"
6161
priority = 6
6262
uses = ["rng"]

drv/stm32h7-rng/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ idol = { workspace = true }
2323
[features]
2424
h743 = ["stm32h7/stm32h743", "drv-stm32xx-sys-api/h743"]
2525
h753 = ["stm32h7/stm32h753", "drv-stm32xx-sys-api/h753"]
26-
ereport = ["task-packrat-api"]
26+
packrat = ["task-packrat-api"]
2727
no-ipc-counters = ["idol/no-counters"]
2828

2929
# This section is here to discourage RLS/rust-analyzer from doing test builds,

drv/stm32h7-rng/src/main.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use userlib::{RecvMessage, hl, task_slot};
2525

2626
task_slot!(SYS, sys);
2727

28-
#[cfg(feature = "ereport")]
28+
#[cfg(feature = "packrat")]
2929
task_slot!(PACKRAT, packrat);
3030

3131
counted_ringbuf!(Trace, 32, Trace::Blank);
@@ -37,7 +37,7 @@ enum Trace {
3737
ClockError,
3838
SeedError,
3939
Recovered,
40-
#[cfg(feature = "ereport")]
40+
#[cfg(feature = "packrat")]
4141
SetRestartId(Result<(), task_packrat_api::CacheSetError>),
4242
}
4343

@@ -233,7 +233,7 @@ impl NotificationHandler for Stm32h7RngServer {
233233
}
234234
}
235235

236-
#[cfg(feature = "ereport")]
236+
#[cfg(feature = "packrat")]
237237
fn generate_restart_id(rng: &mut Stm32h7Rng) {
238238
use task_packrat_api::Packrat;
239239
const BYTES: usize = 16;
@@ -257,7 +257,8 @@ fn generate_restart_id(rng: &mut Stm32h7Rng) {
257257

258258
let id = u128::from_ne_bytes(bytes);
259259
let packrat = Packrat::from(PACKRAT.get_task_id());
260-
let result = packrat.set_ereport_restart_id(id);
260+
// Note: not just for ereports anymore!
261+
let result = packrat.set_restart_id(id);
261262
ringbuf_entry!(Trace::SetRestartId(result));
262263
}
263264

@@ -266,7 +267,7 @@ fn main() -> ! {
266267
let mut rng = Stm32h7Rng::new();
267268
rng.init();
268269

269-
#[cfg(feature = "ereport")]
270+
#[cfg(feature = "packrat")]
270271
generate_restart_id(&mut rng);
271272

272273
let mut srv = Stm32h7RngServer::new(rng);

0 commit comments

Comments
 (0)