8cd2f71ddd
Root cause of hub-child enumeration stalling: after a synchronous action (power-on, reset) the port's state changes WITHOUT a new interrupt ever being generated, and the loop's next step was a blocking EP1 transfer_read with no timeout — the daemon never woke to observe the state it had just caused, so devices behind a hub sat enabled-but-never-attached forever. Move the blocking transfer_read onto a worker thread that forwards each interrupt bitmap as a u64 mask over an mpsc channel. The main loop waits with recv_timeout(POLL_FALLBACK_MS): a real bitmap processes only the changed ports (interrupt fast path), while timeout/disconnect/error falls back to an all-ports poll (progress guarantee). Matches the Linux model where hub_irq is the accelerator but port status reads are always authoritative.