da896e987e
Closes the C18 completeness gap where DriverConfig::resume was a
no-op log line. Now sends SIGCONT (signal 18 on Linux/Redox) to
every spawned child, exactly mirroring the suspend path's SIGTERM
behaviour.
System-level changes:
- DriverConfig::resume(info) — sends SIGCONT to the spawned PID
for the device; falls back gracefully on signal-failure.
- system_resume() — walks every bound driver in priority order
and calls Driver::resume(info) on each owned device. Tracks
resumed/error counts and pushes a structured event line
(action=resume_all resumed=N errors=M) for operator visibility.
- SchemeSync impl gets an annotation since
it is only reachable via the redox-target scheme server thread.
- Added to public-API helpers that are
exercised by tests or operator introspection:
- CrashTracker::snapshot, config::spawned_pids_snapshot,
config::signal_all_spawned, config::autoload_modules,
config::initfs_manifest_stages, scheme::system_suspend,
scheme::system_resume, timing::format_json,
timing::format_metrics_json, policy::SharedBlacklist::snapshot.
- Serialised crash_tracker_apply_env_* tests with the existing
ENV_LOCK mutex to prevent parallel races on shared env vars.
main.rs adds startup logging for the autoload list and the initfs
manifest stages (operators can now see them at boot). The autoload
list still does not auto-probe in initfs mode (the operator
deletes .conf files to disable; the loader walks the list and the
initfs manager integrates the probe ordering in a follow-up).
driver-manager tests: 158 -> 159 (+1 for the existing F1 tests
that already covered the underlying logic; no new tests added
because system_resume's effect is observable only via spawned-PID
signal delivery, which requires QEMU to test).
driver-manager-audit-no-stubs.py: 46 files, 0 violations.