Что означает код возврата ядра macOS 0xE00002D0 (kIOReturnNotAligned)?

 
Предыдущий Следующий
kIOReturnNotWritable kIOReturnBadMedia

kIOReturnNotAligned

Выравнивание является частью контракта ввода-вывода устройства

kIOReturnNotAligned означает, что диапазон памяти, смещение, длина или связанный дескриптор не удовлетворяют правилу выравнивания, требуемому путём IOKit. Нужная граница не закодирована в значении ошибки. Она может зависеть от контроллера, шины, режима передачи, курсора памяти или собственного формата дескриптора драйвера.

Буфер, кажущийся выровненным в пользовательском пространстве, может стать непригодным после применения смещения или при требовании длины, кратной аппаратному блоку. В то же время принудительное приведение указателя не исправляет недопустимый диапазон. Драйвер должен безопасно отобразить всю передачу и описать её оборудованию.

Что нужно проверить

  • Запишите базовый адрес, требуемое смещение, число байтов, размер элемента и выравнивание, гарантированное целевым API.
  • Проверяйте весь диапазон: выровненное начало при неподходящей длине также может привести к ошибке.
  • Используйте документированный API буфера или дескриптора памяти, а не полагайтесь на то, что обычное выделение из кучи удовлетворяет требованиям DMA конкретного устройства.
  • Когда протокол это допускает, копируйте данные в правильно выровненный промежуточный буфер, сохраняя исходную длину и правила владения.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.