Практикум по восстановлению устройств

PCIe: от сообщения об ошибке к возобновлению работы

Разберите последствия ошибок AER, передачу управления от встроенного ПО и решения нескольких драйверов. На примерах документации Linux 6.12 отделите раннюю диагностику и сброс от возобновления обычной работы.

Средний уровень25 минут3 модуля7 вопросов
После курса

Что вы сможете сделать

  1. Различать последствия исправимой, неисправимой нефатальной и фатальной ошибки PCIe.
  2. Проверять передачу управления AER и учитывать результаты всех затронутых драйверов.
  3. Отделять диагностический доступ, повторную настройку после сброса и разрешение обычного ввода-вывода.
  4. Ограничивать вывод об окончательном отказе результатом процедуры восстановления.
Модуль 1 из 3

Модуль 1. Что подтверждает сообщение об ошибке

Категория ошибки характеризует влияние на интерфейс. Для приёмки устройства нужны также сведения о результате восстановления.

  • Драйвер AER в Linux собирает сведения об ошибках PCIe, сообщает о них и выполняет действия восстановления.

  • Руководство AER рассматривает ошибки иерархии и соединений PCIe. Специфические ошибки самого устройства в этот перечень не входят: они передаются его драйверу отдельно.

  • Исправимые ошибки PCIe обнаруживаются и исправляются аппаратурой. Для этой категории руководство не требует программного восстановления интерфейса; драйвер AER очищает статус исправимой ошибки и записывает событие в журнал.

  • Неисправимая нефатальная ошибка затрагивает надёжность отдельной транзакции, хотя сама линия PCIe остаётся работоспособной.

  • Фатальная ошибка делает линию PCIe ненадёжной. Для описанного восстановления после такого события драйвер AER требует сброса соединения на вышестоящем порту.

  • При приёмке рекомендуем отдельно фиксировать сообщение AER и результат восстановления устройства. Запись об ошибке не доказывает, что драйверы завершили восстановление и возобновили обычную работу.

Модуль 2 из 3

Модуль 2. Кто принимает решение о восстановлении

Поддержка AER в системе и передача управления от встроенного ПО — разные условия. Ответ одного драйвера также не заменяет согласование действий всего затронутого сегмента.

  • Согласно руководству, Linux не обрабатывает события AER, пока встроенное ПО не передаст управление операционной системе через метод ACPI _OSC. Одновременная обработка встроенным ПО и Linux может приводить к непредсказуемому поведению.

  • При уведомлении об ошибке платформа вызывает error_detected() у затронутых драйверов. Описанный этап позволяет остановить текущую деятельность; драйверу не следует начинать новый ввод-вывод внутри обработчика и после его возврата.

  • В описанной последовательности запрос сброса слота хотя бы от одного затронутого драйвера переводит восстановление к этапу сброса. Готовность одного драйвера обойтись без него не определяет решение для всего сегмента.

  • Возврат PCI_ERS_RESULT_RECOVERED на этапе раннего восстановления ещё не гарантирует, что драйверу разрешат продолжить работу: другой драйвер того же сегмента может потребовать сброса.

Модуль 3 из 3

Модуль 3. Когда возвращается обычная работа

Доступ к устройству, его повторная настройка и разрешение обычной работы имеют разные назначения. Набор этапов зависит от возможностей и политики платформы.

  • Диагностический доступ к устройству на этапе раннего восстановления ещё не разрешает драйверу возобновлять обычную работу.

  • После сброса обработчик slot_reset() позволяет драйверу заново настроить устройство. Начинать обычную обработку ввода-вывода на этом этапе не следует: для её возобновления предусмотрен последующий вызов resume().

  • В описанной последовательности платформа вызывает resume() у затронутых драйверов после успешного результата восстановления всех драйверов сегмента. Этот вызов сообщает, что обычную деятельность можно возобновить.

  • При объявленном окончательном отказе платформа не смогла восстановить устройство. Документ рекомендует драйверу отменить ожидающий ввод-вывод и отклонять новые запросы, возвращая ошибку вышестоящим слоям. Название этого исхода не доказывает необратимую физическую поломку.

Финишная прямая

Проверьте инженерное мышление

Вопросы проверяют не память на аббревиатуры, а умение не делать лишних выводов.

01В журнале Linux 6.12 событие PCIe классифицировано как неисправимая нефатальная ошибка. Как по руководству соотносятся состояние линии и надёжность затронутой транзакции?
02После неисправимой ошибки PCIe в протоколе приёмки сохранена запись AER. Результат восстановления драйверов и последующая работа устройства не зафиксированы. Можно ли считать восстановление подтверждённым?
03Ядро собрано с поддержкой AER. Встроенное ПО само обрабатывает эти события, а передача управления Linux через ACPI _OSC не подтверждена. Какой вывод соответствует руководству Linux 6.12?
04Платформа поддерживает сброс слота. При раннем восстановлении первый драйвер вернул PCI_ERS_RESULT_RECOVERED, второй — PCI_ERS_RESULT_NEED_RESET. Как учитывается второй ответ в описанной последовательности?
05После ошибки драйверу снова доступно чтение регистров, выполняется mmio_enabled(). Инженер предлагает сразу возобновить обычные запросы приложения. Как оценить предложение по назначению этого этапа?
06Обработчик slot_reset() завершил повторную настройку устройства. Все затронутые драйверы сообщили об успешном восстановлении. Какой последующий вызов в описанной последовательности разрешает вернуться к обычной работе?
07Платформа завершила попытку восстановления с pci_channel_io_perm_failure. В отчёте предлагают записать: «Устройство физически и необратимо сломано». Насколько оправдан такой вывод?

Следующий шаг

Сформулируйте задачу и уточните требования к своей системе.

Подготовить состав проекта

Откроется черновик вопроса. Отправьте его, когда будете готовы.

Проверяемая база

Источники курса

Ссылки приведены один раз для всего курса, чтобы не мешать чтению каждого тезиса.

  • Официальная документация

    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 и предложений без реализации. Возможность восстановления конкретного устройства документом не подтверждается.

    Открыть первоисточник
Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие