| Previous | Next |
| kIOReturnNotAttached | kIOReturnNoSpace |
kIOReturnNoChannels
A transfer resource could not be allocated
kIOReturnNoChannels means that the IOKit path could not obtain the channel resource needed for the operation. The name is historical and should not be read as proof that every physical DMA channel in the machine is permanently exhausted. A driver family can use it for a controller-specific queue, stream, or DMA allocation that is unavailable in the current device state.
This differs from kIOReturnNoFrames: the latter says that no DMA frames were queued, while this result occurs before the caller has a usable channel or equivalent transfer path. Increasing an application buffer does not resolve a resource arbitration failure by itself.
How to narrow it down
- Record which device, interface, and operation requested the channel, including whether another client already owns an exclusive or streaming mode.
- Check for concurrent capture, playback, storage, or device-management activity that uses the same controller or interface.
- Close abandoned interfaces and wait for documented completion or teardown callbacks before reopening the device.
- For driver development, log allocation and release of the relevant queue or channel object rather than only the final IOReturn value.
References
- Apple Developer: kIOReturnNoChannels
- Apple XNU source: IOReturn.h
- Apple IOKit Fundamentals: Architectural Overview
Looking for a different code? Search another status or error code.