Estoy revisando los módulos del kernel del controlador en el kernel de Linux y generalmente se llama a request_irq() desde la función de sonda. drivers/net/ethernet/natsemi/ns83820.ko puede ser un ejemplo de ello.
request_irq() llama a request_threaded_irq() y esto se menciona en los comentarios:
This call allocates interrupt resources and enables the
interrupt line and IRQ handling. From the point this
call is made your handler function may be invoked.
enlace:https://elixir.bootlin.com/linux/latest/source/kernel/irq/manage.c#L1984
Eso significa que se puede invocar el controlador incluso antes de que se complete la sonda.
Pero he notado que en muchos controladores no se tienen en cuenta las variables compartidas o los campos de desarrollo que se pueden leer y modificar simultáneamente en la sonda y el controlador de interrupciones.
Quiero saber con qué frecuencia ocurre este caso en el que la sonda y el controlador de interrupciones se ejecutan en paralelo.
Respuesta1
Se puede llamar al controlador de interrupciones mientras la sonda aún no ha finalizado. Sin embargo, para que eso suceda, el dispositivo debe inicializarse y generar una interrupción. Muy a menudo, la función de sonda primero inicializará el dispositivo y garantizará que no genere interrupciones antes de solicitar el irq. Esto garantiza que no se llamará al controlador hasta que el controlador esté listo para manejar las interrupciones.
Una excepción común son los controladores RTC y recientemente he solucionado algunos de ellos. Esto sucede porque el RTC todavía se está ejecutando mientras Linux no y el controlador no debe reinicializar el dispositivo cada vez que arranca. Aquí hay un ejemplo: