habilitar / deshabilitar las interrupciones PCI

8

Estoy implementando un controlador PCIe, y me gustaría entender a qué nivel se pueden o deberían habilitar / deshabilitar las interrupciones. Intencionalmente no especifico el SO, ya que asumo que debería ser relevante para cualquier plataforma. Por niveles me refiero a lo siguiente:

  • Marco de manejo de interrupciones específico del SO
  • Las interrupciones se pueden deshabilitar o habilitar en los registros de espacio de configuración PCI / PCIe, por ejemplo. Registro COMMAND
  • Las interrupciones también se pueden enmascarar a nivel de dispositivo, por ejemplo, podemos configurar el dispositivo para que no active ciertas interrupciones en el host

Comprendo que cualquier tipo de interrupción que se esté utilizando en PCIe (emulación INTx, MSI o MSI-X), debe enviarse al sistema operativo host.

Entonces, mi pregunta es: ¿tenemos que habilitar o deshabilitar las interrupciones en cada capa, o es suficiente solo lo más cerca posible del hardware, por ejemplo? en los registros PCI pertinentes?

    
pregunta Mark

1 respuesta

1

Los sistemas operativos generalmente se quejan enérgicamente sobre interrupciones inesperadas, porque son errores de programación fácilmente detectables en los controladores.

Por lo general, su hardware se iniciará en un estado bastante inerte después del restablecimiento, donde espera ser configurado. En este estado, no hay una manera significativa de generar una interrupción, porque aún no se ha establecido ningún mapeo y no se sabe qué interrupción.

Durante la configuración, la asignación de interrupciones comienza a existir y se le dice a la tarjeta qué línea de interrupción debe usar (INTA..INTD como PCI heredado o MSI / MSI-X), pero aún no hay un controlador para manejar las interrupciones. . Linux tiene un controlador predeterminado aquí que se queja del registro del sistema y luego desactiva la fuente de interrupción, ya que el hardware parece estar defectuoso (es decir, de forma predeterminada, todas las interrupciones están habilitadas, pero se espera que solo se produzcan aquellas en las que está registrado un controlador) .

El controlador finalmente registra los controladores de interrupciones y habilita las interrupciones en las que está interesado. Si el controlador ya no está interesado en una condición específica, debe deshabilitar la interrupción en el dispositivo, porque ahí es donde se encuentran las causas específicas de la interrupción del dispositivo. Enmascarado: las capas inferiores solo saben que "algo sucedió".

    
respondido por el Simon Richter

Lea otras preguntas en las etiquetas