| Previous | Next |
| kIOUSBBufferOverrunErr | kIOUSBNotSent1Err |
kIOUSBBufferUnderrunErr
An underrun is a transfer-path condition
kIOUSBBufferUnderrunErr is the counterpart to the legacy buffer-overrun status. The IOUSBFamily definition associates it with a host-side hardware or bus condition during a data-out path, rather than with a device class's own response code. It says that the transfer pipeline did not have the data or buffering it needed at the required point in processing.
This differs from a normal short packet, which can be valid for some USB transfer types and protocols. It also differs from a device endpoint halt: an underrun does not tell you that the device deliberately rejected the endpoint. The useful question is which stage ran short—application producer, queued request, DMA/controller path, or a transition caused by power management.
Diagnostic boundary
- Record the transfer direction, request size, actual completion size, endpoint type, and whether the device was behind a hub.
- Preserve the queue state before and after the error; a later timeout or returned request may be a consequence rather than an independent fault.
- Inspect the producer side of an OUT transfer for buffer lifetime and asynchronous completion mistakes.
- Do not convert the status into a generic “device sent too little data” diagnosis without controller and protocol evidence.
References
Looking for a different code? Search another status or error code.