| Предыдущий | Следующий |
| kIOReturnPortExists | kIOReturnNoInterrupt |
kIOReturnCannotWire
Почему буферы ввода-вывода может требоваться закрепить
kIOReturnCannotWire означает, что операция не смогла закрепить физическую память. Документация IOKit объясняет, что память для передачи ввода-вывода может быть обязана оставаться резидентной и не перемещаться, пока устройство обращается к ней. Это состояние подготовки передачи, а не просто сообщение о доступности обычной кучи.
Значение могут иметь диапазон адресов запроса, структура сегментов, время жизни дескриптора памяти и временная последовательность. Результат отличается от kIOReturnNoMemory, обозначающего отказ выделения, и от kIOReturnNotAligned, указывающего на неверное выравнивание. Повтор без освобождения прежних дескрипторов или сокращения незавершённой работы может снова столкнуться с тем же ограничением.
Что исследовать
- Запишите размер буфера, владение памятью, тип дескриптора, направление, число сегментов и этап, на котором подготовка завершилась ошибкой.
- Убедитесь, что каждой операции подготовки соответствует требуемое завершение или освобождение.
- Проверьте меньший ограниченный запрос и не удерживайте блокировки вокруг операций, способных ожидать подготовку памяти.
- Используйте документированный путь дескрипторов памяти IOKit, а не предполагайте, что необработанный указатель пользовательского пространства непосредственно пригоден для ввода-вывода устройства.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.