| Предыдущий | Следующий |
| kIOReturnRLDError | kIOReturnBusy |
kIOReturnDMAError
Это результат пути DMA, а не общая нехватка памяти
kIOReturnDMAError — возвращаемое значение IOKit для отказа в пути DMA. Передачи DMA подготавливаются стеком драйверов, который описывает память устройству и может создавать аппаратно-зависимые сегменты или дескрипторы. Сам код не говорит, произошёл ли отказ при подготовке буфера, программировании устройства или завершении передачи; это различие определяется семейством IOKit и драйвером, вернувшими результат.
Не считайте этот статус взаимозаменяемым с kIOReturnNoMemory, kIOReturnNoResources или kIOReturnNotAligned. Они описывают другие состояния. Неудачная операция DMA может оставить передачу завершённой лишь частично, поэтому повтор записи без знания протокола устройства способен продублировать или повредить данные.
Что зафиксировать до повтора
- Определите семейство IOKit, запись устройства в реестре, активный интерфейс или режим, направление операции, запрошенную длину и смещение.
- Сохраните записи драйвера и ядра из того же временного окна; символическое значение IOReturn является лишь итоговым статусом для вызывающей стороны.
- Проверьте, не освободила, не переотобразила и не изменила ли вызывающая сторона буфер до асинхронного завершения.
- Для восстанавливаемого протокола устройства отмените или завершите ожидающую работу, сбросьте соответствующую очередь документированным для семейства способом и заново откройте устройство до выдачи новых запросов.
Ссылки
- Apple Developer: kIOReturnDMAError
- Исходный код Apple XNU: IOReturn.h
- Основы Apple IOKit: управление данными
Нужно найти другой код? Найти другой код состояния или ошибки.