irqd is the interrupt routing daemon for EriX.
Find a file
Erik Inkinen 4ccfd653ba
All checks were successful
CI / test (push) Successful in 5s
CI / security (push) Successful in 1m27s
CI / minimal-versions (push) Successful in 11s
irqd: drop unstable rustfmt options for stable toolchains
2026-03-23 10:19:52 +02:00
.github Implement IRQD service with IPC handling and interrupt management 2026-03-07 12:06:54 +02:00
src irqd: split registry runtime and startup paths 2026-03-23 09:37:41 +02:00
.editorconfig Initial commit 2026-03-06 12:04:21 +01:00
.gitignore Initial commit 2026-03-06 12:04:21 +01:00
ARCHITECTURE.md Implement IRQD service with IPC handling and interrupt management 2026-03-07 12:06:54 +02:00
Cargo.toml runtime-mode: migrate feature gates and document mode model 2026-03-11 08:05:00 +02:00
CODE_OF_CONDUCT.md Initial commit 2026-03-06 12:04:21 +01:00
CONTRIBUTING.md Initial commit 2026-03-06 12:04:21 +01:00
LICENSE Initial commit 2026-03-06 12:04:21 +01:00
linker.ld Add stack reserve section to linker script and adjust stack guard buffer placement 2026-03-11 02:29:59 +02:00
README.md Implement IRQD service with IPC handling and interrupt management 2026-03-07 12:06:54 +02:00
ROADMAP.md Implement IRQD service with IPC handling and interrupt management 2026-03-07 12:06:54 +02:00
rustfmt.toml irqd: drop unstable rustfmt options for stable toolchains 2026-03-23 10:19:52 +02:00
SECURITY.md docs: align security policy phase numbering 2026-03-11 05:28:11 +02:00

irqd

irqd is the interrupt routing daemon for EriX.

It bridges kernel interrupt events to userspace handlers through a deterministic seeded-and-sealed registration policy and explicit ACK flow.


Status

  • IRQ routing path is implemented for IPC_INTERRUPT_LINE_LAPIC_TIMER.
  • Root orchestration integration is implemented (named -> timed -> logd -> crashd -> irqd -> ...).
  • Positive, SMP, and missing-service negative VM scenarios are implemented and passing.

Runtime model

irqd lifecycle:

  1. Startup envelope validation and ready reply.
  2. Self-registration with named.
  3. Root-seeded handler tuple intake (SEED_HANDLER) and SEAL.
  4. Handler activation by exact tuple match (REGISTER_HANDLER).
  5. Interrupt wait/dispatch loop:
    • wait kernel interrupt event,
    • send typed notify payload to registered handler endpoint,
    • require explicit ACK before the next delivery for the line.

Mask policy is controlled via SET_MASK, mapped to kernel interrupt-line configuration.


IPC surface

Handled operations (from lib-ipc):

  • IPC_PHASE2_IRQD_OP_SEED_HANDLER
  • IPC_PHASE2_IRQD_OP_REGISTER_HANDLER
  • IPC_PHASE2_IRQD_OP_SET_MASK
  • IPC_PHASE2_IRQD_OP_ACK
  • IPC_PHASE2_IRQD_OP_SEAL

Notify payload:

  • Phase2IrqdEventNotifyV1

Determinism and failures

irqd returns deterministic result classes (OK, DENIED, INVALID_ARGUMENT, NOT_FOUND, BUSY) for malformed or unauthorized requests.

No panic path is used for ordinary runtime request failures.


Build and test

cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-targets --all-features

Dependencies

  • lib-bootstrap
  • lib-capabi
  • lib-ipc
  • lib-service
  • ipc-syscall-x86_64

No third-party crates are used.