| Предыдущий | Следующий |
| kIOReturnNotWritable | kIOReturnBadMedia |
kIOReturnNotAligned
Выравнивание является частью контракта ввода-вывода устройства
kIOReturnNotAligned означает, что диапазон памяти, смещение, длина или связанный дескриптор не удовлетворяют правилу выравнивания, требуемому путём IOKit. Нужная граница не закодирована в значении ошибки. Она может зависеть от контроллера, шины, режима передачи, курсора памяти или собственного формата дескриптора драйвера.
Буфер, кажущийся выровненным в пользовательском пространстве, может стать непригодным после применения смещения или при требовании длины, кратной аппаратному блоку. В то же время принудительное приведение указателя не исправляет недопустимый диапазон. Драйвер должен безопасно отобразить всю передачу и описать её оборудованию.
Что нужно проверить
- Запишите базовый адрес, требуемое смещение, число байтов, размер элемента и выравнивание, гарантированное целевым API.
- Проверяйте весь диапазон: выровненное начало при неподходящей длине также может привести к ошибке.
- Используйте документированный API буфера или дескриптора памяти, а не полагайтесь на то, что обычное выделение из кучи удовлетворяет требованиям DMA конкретного устройства.
- Когда протокол это допускает, копируйте данные в правильно выровненный промежуточный буфер, сохраняя исходную длину и правила владения.
Ссылки
- Apple Developer: kIOReturnNotAligned
- Исходный код Apple XNU: IOReturn.h
- Основы Apple IOKit: дескрипторы памяти и ограничения DMA
Нужно найти другой код? Найти другой код состояния или ошибки.