Практикум по восстановлению устройств
PCIe: от сообщения об ошибке к возобновлению работы
Разберите последствия ошибок AER, передачу управления от встроенного ПО и решения нескольких драйверов. На примерах документации Linux 6.12 отделите раннюю диагностику и сброс от возобновления обычной работы.
Что вы сможете сделать
- Различать последствия исправимой, неисправимой нефатальной и фатальной ошибки PCIe.
- Проверять передачу управления AER и учитывать результаты всех затронутых драйверов.
- Отделять диагностический доступ, повторную настройку после сброса и разрешение обычного ввода-вывода.
- Ограничивать вывод об окончательном отказе результатом процедуры восстановления.
Модуль 1. Что подтверждает сообщение об ошибке
Категория ошибки характеризует влияние на интерфейс. Для приёмки устройства нужны также сведения о результате восстановления.
Драйвер AER в Linux собирает сведения об ошибках PCIe, сообщает о них и выполняет действия восстановления.
Руководство AER рассматривает ошибки иерархии и соединений PCIe. Специфические ошибки самого устройства в этот перечень не входят: они передаются его драйверу отдельно.
Исправимые ошибки PCIe обнаруживаются и исправляются аппаратурой. Для этой категории руководство не требует программного восстановления интерфейса; драйвер AER очищает статус исправимой ошибки и записывает событие в журнал.
Неисправимая нефатальная ошибка затрагивает надёжность отдельной транзакции, хотя сама линия PCIe остаётся работоспособной.
Фатальная ошибка делает линию PCIe ненадёжной. Для описанного восстановления после такого события драйвер AER требует сброса соединения на вышестоящем порту.
При приёмке рекомендуем отдельно фиксировать сообщение AER и результат восстановления устройства. Запись об ошибке не доказывает, что драйверы завершили восстановление и возобновили обычную работу.
Модуль 2. Кто принимает решение о восстановлении
Поддержка AER в системе и передача управления от встроенного ПО — разные условия. Ответ одного драйвера также не заменяет согласование действий всего затронутого сегмента.
Согласно руководству, Linux не обрабатывает события AER, пока встроенное ПО не передаст управление операционной системе через метод ACPI _OSC. Одновременная обработка встроенным ПО и Linux может приводить к непредсказуемому поведению.
При уведомлении об ошибке платформа вызывает error_detected() у затронутых драйверов. Описанный этап позволяет остановить текущую деятельность; драйверу не следует начинать новый ввод-вывод внутри обработчика и после его возврата.
В описанной последовательности запрос сброса слота хотя бы от одного затронутого драйвера переводит восстановление к этапу сброса. Готовность одного драйвера обойтись без него не определяет решение для всего сегмента.
Возврат PCI_ERS_RESULT_RECOVERED на этапе раннего восстановления ещё не гарантирует, что драйверу разрешат продолжить работу: другой драйвер того же сегмента может потребовать сброса.
Модуль 3. Когда возвращается обычная работа
Доступ к устройству, его повторная настройка и разрешение обычной работы имеют разные назначения. Набор этапов зависит от возможностей и политики платформы.
Диагностический доступ к устройству на этапе раннего восстановления ещё не разрешает драйверу возобновлять обычную работу.
После сброса обработчик slot_reset() позволяет драйверу заново настроить устройство. Начинать обычную обработку ввода-вывода на этом этапе не следует: для её возобновления предусмотрен последующий вызов resume().
В описанной последовательности платформа вызывает resume() у затронутых драйверов после успешного результата восстановления всех драйверов сегмента. Этот вызов сообщает, что обычную деятельность можно возобновить.
При объявленном окончательном отказе платформа не смогла восстановить устройство. Документ рекомендует драйверу отменить ожидающий ввод-вывод и отклонять новые запросы, возвращая ошибку вышестоящим слоям. Название этого исхода не доказывает необратимую физическую поломку.
Проверьте инженерное мышление
Вопросы проверяют не память на аббревиатуры, а умение не делать лишних выводов.
Следующий шаг
Сформулируйте задачу и уточните требования к своей системе.
Подготовить состав проектаОткроется черновик вопроса. Отправьте его, когда будете готовы.
Источники курса
Ссылки приведены один раз для всего курса, чтобы не мешать чтению каждого тезиса.
- Официальная документация
The PCI Express Advanced Error Reporting Driver Guide HOWTO
Linux kernel documentation · Linux v6.12, commit adc218676eef25575469234709c2d87185ca223a
Полностью прочитана локальная копия, 247 строк. Описан драйвер AER в документации Linux 6.12; это не проверка реализации конкретной платы. Счётчики системной файловой системы требуют отдельного документа ABI.
Открыть первоисточник - Официальная документация
PCI Error Recovery
Linux kernel documentation · Linux v6.12, commit adc218676eef25575469234709c2d87185ca223a
Полностью прочитана локальная копия, 432 строки. Общая последовательность отделена от примечаний о PowerPC и предложений без реализации. Возможность восстановления конкретного устройства документом не подтверждается.
Открыть первоисточник