Como os erros de PCI (e) são propagados para o userspace em caso de erros?

0

O PCIe suporta vários mecanismos de relatório de erros , e posso ver como o driver de dispositivo interface com esses recursos para lidar com tipos de erros específicos e reinicializar o dispositivo em questão conforme necessário em caso de erros.

No entanto, como um erro de leitura de PCIe seria indicado para uma leitura de programa de espaço de usuário do espaço de endereçamento mapeado pela memória, no caso de a leitura não poder ser satisfeita, por exemplo? devido a um erro de bus ou a um dispositivo de desconexão desconectado?

Pelo que eu entendi, existem duas possibilidades básicas: Dados inválidos são propagados para o aplicativo de leitura (por exemplo, todas as leituras retornariam 0x00 ou 0xFF), ou o erro PCI resulta em um estado de erro ou interrupção da CPU que será manipulado pelo kernel e traduzido para um sinal (como o SIGBUS em um Unix).

(Para gravações, isso provavelmente não funcionaria, pelo menos se elas forem implementadas como transações PCIe postadas, já que o aplicativo de espaço do usuário não seria bloqueado no acesso à memória: um sinal, se entregue, chegaria assincronamente em algum momento após a gravação falhada.)

O último parece ser uma escolha mais segura, mas eu encontrei menções de ambos um sinal e um valor especial sendo enviado ( aqui e aqui ).

Minha pergunta não está limitada a um sistema específico, mas como a implementação de erros PCIe provavelmente depende muito do hardware e da arquitetura do kernel do sistema em questão, respostas específicas do sistema também seriam muito bem-vindas.

    
por lxgr 13.05.2017 / 12:27

0 respostas