PCIe поддерживает различные механизмы сообщения об ошибках, и я вижу, как драйвер устройства будет взаимодействовать с этими возможностями для обработки определенных типов ошибок и повторной инициализации соответствующего устройства, как требуется в случае ошибок.

Однако как ошибка чтения PCIe будет указана при чтении программы пользовательского пространства из отображенного в памяти адресного пространства в случае, если чтение не может быть выполнено, например, из-за ошибки шины или отключенного устройства горячей замены?

Насколько я понимаю, есть две основные возможности: либо недопустимые данные передаются в приложение для чтения (например, все чтения возвращают 0x00 или 0xFF), либо ошибка PCI приводит к состоянию ошибки или прерыванию ЦП, которое будет обрабатывается ядром и переводится в сигнал (например, SIGBUS в Unix).

(Для записей это, вероятно, не будет работать, по крайней мере, если они будут реализованы как проводные транзакции PCIe, так как приложение пространства пользователя не будет заблокировано при доступе к памяти: сигнал, если он вообще доставлен, будет поступать асинхронно через некоторое время после сбоя записывать.)

Последний вариант может показаться более безопасным, но я нашел упоминания как о сигнале, так и об отправке специального значения (здесь и здесь).

Мой вопрос не ограничивается конкретной системой, но, поскольку реализация ошибок PCIe, вероятно, сильно зависит как от аппаратного обеспечения, так и от архитектуры ядра рассматриваемой системы, ответы на конкретные вопросы системы также будут приветствоваться.

0