Hi all,
I'm currently implementing the IRQ session on base-linux. If I understood the Foundations book correctly interrupts are waiting in a separate thread that locks when it is waiting and continues (and calls the handler) once an interrupt is triggered.
According to this I have implemented a kernel module [1] that triggers interrupts via reads on a device file. The interrupt can be registered via ioctl on the file descriptor and the a blocking read is called that returns once the registered interrupts has been triggered.
I have looked into the implementations of base-nova and base-hw but didn't completely understand it. As far as I understood the session component implements the session and only requires the interrupt number and a signal handler. The Irq_object implements the waiting thread but I didn't see where it is waiting for the interrupt. Also as far as I could see it the actual interrupt capability stays inside the session in core and only the signal handler capability is passed to the component.
Is my understanding of this correct? And is there any further documentation on this?
Regards, Johannes
[1]: https://github.com/jklmnn/hwiodev/blob/c445eb58daa6d29e9f779bf6ad4b00818fba6...