Skip to content

F4.3: monitor de liveness/deadline por tarea + IWDG windowed#81

Merged
guillo93 merged 2 commits into
mainfrom
f4.3-liveness-monitor
Jun 3, 2026
Merged

F4.3: monitor de liveness/deadline por tarea + IWDG windowed#81
guillo93 merged 2 commits into
mainfrom
f4.3-liveness-monitor

Conversation

@guillo93

@guillo93 guillo93 commented Jun 3, 2026

Copy link
Copy Markdown
Owner

Resumen

  • Monitor de liveness por tarea: detecta tareas VIVAS que dejan de progresar (cuelgue lógico sin crash, invisible al fault containment) y las recupera en frío. set_liveness_period/liveness_checkin/liveness_overdue/force_kill en rugus-core/sched.rs, con TaskSlot.liveness_period/deadline.
  • Syscall Checkin (0x04): latido userland (trampoline svc 4 + hook + cpu_checkin). El appliance F103 lo deja como no-op.
  • IWDG windowed (gemelos F4/F7): Iwdg::start_windowed añade WINR (~50 %, WINR_HALF=250) — alimentar demasiado pronto (< ~1 s) también resetea, así que pilla un supervisor desbocado, no solo uno colgado.
  • Ejemplos F407/F769: good_app late con checkin; el supervisor kickea dentro de la ventana (~1.5 s) y recupera colgadas (liveness_overdueforce_kill + respawn + rearme); liveness_selftest de arranque.

Validación

  • F407 + F769 por RTT: liveness selftest: PASS, IWDG windowed estable (sin resets) bajo churn de respawn por >5 s.
  • host-tests: nuevo módulo liveness_tests (arming, overdue antes/después del plazo, checkin renueva, tarea actual nunca colgada, force_kill recupera). 29 tests verdes.
  • fmt + clippy (×2 targets, -D warnings) + doc (-D warnings) limpios.

Notas

  • La reconstrucción de stack de respawn no se ejerce en host (stack_base u32 trunca punteros de 64-bit); se valida en placa.
  • Se colapsa un if de wake_expired en guard de match para silenciar clippy::collapsible_if (clippy stable más reciente).

🤖 Generated with Claude Code

guillo93 added 2 commits June 2, 2026 20:29
Detecta tareas VIVAS que dejan de progresar (cuelgue lógico sin crash, que
el fault containment no ve) y las recupera, más una ventana inferior en el
watchdog que además pilla un supervisor desbocado.

rugus-core/sched.rs:
- TaskSlot gana liveness_period/liveness_deadline (Option<u32>).
- set_liveness_period (arma/desarma con period 0), liveness_checkin(_current),
  liveness_overdue (escanea no-actuales no-Killed con plazo vencido, comparación
  monotónica resistente a wrap), force_kill (mata viva no-actual + libera sync +
  desarma). respawn limpia el plazo viejo. Accesores *_for_test.
- Colapsa el arm Sleeping de wake_expired en guard (clippy collapsible_if).

rugus-core/syscall.rs: Id::Checkin=0x04 + from_raw + dispatch (sin punteros) +
hook checkin + trampoline user::checkin (svc 4).

rugus-kernel/lib.rs: hook checkin -> liveness_checkin_current; wrappers
set_liveness_period/cpu_checkin/liveness_overdue/force_kill; liveness_selftest
de arranque.

HAL F4/F7 (gemelos): Iwdg::start_windowed con WINR (offset 0x10) al ~50 %
(WINR_HALF=250): alimentar antes de ~1 s tras la recarga también resetea.

Ejemplos F407/F769: good_app late con checkin cada loop; main arma liveness de
good_app (1 s) y registra liveness_selftest; supervisor kickea el IWDG dentro de
la ventana (~1.5 s) y recupera tareas colgadas (liveness_overdue -> force_kill +
respawn + rearme). Appliance F103: hook checkin no-op.

host-tests: módulo liveness_tests (arming, overdue antes/después del plazo,
checkin renueva, tarea actual nunca colgada, force_kill recupera) + Checkin en
dispatch e id_from_raw. La reconstrucción de stack de respawn no se ejerce en
host (stack_base u32 trunca punteros 64-bit); validada en placa.

Validado F407+F769 por RTT: "liveness selftest: PASS", IWDG windowed estable
(sin resets) bajo churn de respawn. 29 tests host verdes.
cargo doc --workspace con -D warnings falla por rustdoc::private_intra_doc_links
(WINR_HALF es const privada). Se degrada el link a code-span en ambos gemelos
F4/F7.
@guillo93 guillo93 merged commit bbc7be2 into main Jun 3, 2026
9 checks passed
@guillo93 guillo93 deleted the f4.3-liveness-monitor branch June 3, 2026 09:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant