Как ошибки PCI (e) распространяются в пространстве пользователя в случае ошибок?

489
lxgr

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

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

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

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

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

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

0
Я видел обе ошибки PCI, о которых сообщалось в системном журнале (поэтому возникло прерывание), и `ff` возвращался при чтении в этом случае, поэтому я предполагаю, что ответ" оба ". dirkt 6 лет назад 0
Прерывание, сообщаемое в системном журнале, может произойти асинхронно, хотя сигнал не отправляется приложению для чтения, верно? lxgr 6 лет назад 0
Приложение IIRC (lspci) не получило сигнал, но это проблема реализации ядра Linux, а не проблема реализации шины PCIe. Ничто не мешает ядру отправлять сигнал, AFAIK адрес, вызывающий нарушение, регистрируется. dirkt 6 лет назад 0

0 ответов на вопрос

Похожие вопросы