What does macOS kernel return 0xE000400D (kIOUSBBufferUnderrunErr) mean?

 
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.