| Previous | Next |
| kIOReturnNotResponding | kIOReturnIsoTooNew |
kIOReturnIsoTooOld
The requested start time has already passed
kIOReturnIsoTooOld is an IOKit timing result for an isochronous request scheduled too far in the past. Isochronous I/O uses a frame-based schedule rather than an open-ended byte stream. In Apple’s legacy USB interface, the caller supplies the bus frame number on which an isochronous write should start; by the time the driver receives the request, that frame can already be outside the controller’s acceptable scheduling window.
This is not the same as an ordinary timeout. A timeout says an operation did not complete within an allowed wait; kIOReturnIsoTooOld says the requested schedule was invalid before the transfer could be placed. The safe correction is to obtain a current frame value and resubmit with an appropriate lead time, not to reuse the stale start frame.
How to diagnose it
- Log the requested start frame, the current bus frame, transfer duration, and the delay between computing and submitting the request.
- Keep scheduling and submission close together; avoid computing a frame number on one thread and queueing it much later on another.
- Account for queue stalls caused by mode changes, debugger pauses, CPU contention, or blocking work in the producer path.
- Use a documented lead-time policy for the specific device and controller; the allowable window is not implied by the IOReturn value alone.
References
- Apple Developer: kIOReturnIsoTooOld
- Apple: LowLatencyWriteIsochPipeAsync
- USB-IF: USB 2.0 Specification
- libusb: isochronous asynchronous I/O
Looking for a different code? Search another status or error code.
