pub struct IrqWorkerWaiter { /* private fields */ }Expand description
Fixed-owner waiter for one hard-IRQ notification cell.
The IRQ registration and the scheduler park transaction are the only two ownership edges. The waiter deliberately does not enqueue the same thread in a second task wait queue: a direct IRQ wake already targets the park generation owned by the scheduler.
Implementations§
Source§impl IrqWorkerWaiter
impl IrqWorkerWaiter
Sourcepub fn new(wake_owner: ThreadWakeHandle) -> Self
pub fn new(wake_owner: ThreadWakeHandle) -> Self
Binds a reusable IRQ registration to one fixed scheduler thread.
Sourcepub fn wait(&self, event: &IrqWaitCell) -> Result<(), TaskError>
pub fn wait(&self, event: &IrqWaitCell) -> Result<(), TaskError>
Waits until the cell consumes one pending or concurrent notification.
Unrelated scheduler wakes are retried without republishing the IRQ registration. This is the same fixed-waiter ownership used by Linux completion workers: the producer wakes the scheduler task directly and the scheduler remains the sole owner of its blocked/runnable state.
Sourcepub fn wait_timeout(
&self,
event: &IrqWaitCell,
timeout: Duration,
) -> Result<bool, TaskError>
pub fn wait_timeout( &self, event: &IrqWaitCell, timeout: Duration, ) -> Result<bool, TaskError>
Waits until notification or a relative timeout expires.
The timeout path retains the generic wait-queue race arbitration until
the IRQ registration exposes a typed notify-versus-timeout outcome.
The unbounded completion hot path uses Self::wait and owns no
detached task wait queue.