More than 2 years ago I have written a WDM Kernel Mode driver for NI6612 and it has been working very well in performant computers (for example Tyan with Windows 7 32 bit) even when all 8 counters with different and fast frequencies (1200Hz, 600Hz, 500Hz, 100Hz, 10Hz etc ...) are used together in the same scenario. The counters are configured to give an interrupt to the bus and to send a square wave to the output.
On other computers (with Windows 10), with other motherboards, with less PCIe slots and sometimes with other devices sharing the same IRQ, some time after the counters are started, one or more counters are stopping to work. I look in Dbgview and there are no entrances to ISR (I have prints for it) . It seems that the counters are stopping to get the ISR called (by the PCIe bus driver of the system).
When I add a small delay (20 to100 microseconds) between the start/activation of the counters, the problem disappears, or is a significant improvement (counters are getting "blocked" after a much longer time since started).
I’ve searched the net in what concerns the problem and there are many advises like : moving to other slot, avoid to share the IRQ with other devices, to check in the BIOS if the slot is “coupled” with other slots by the manufacturer (in order to use less Bridge Circuits on the motherboard – is cheaper). In other words to try to avoid “interrupts storms”.
But the driver has to work in any computer even if their hardware is less performant.
The driver is written to work with the legacy Line-Based Interrupts, not the PCIExpress MSI Interrupts (PCIExpress emulates old PCI Line-Based Interrupts)
Now I’ll try to formulate some questions :
Should I try to improve the Interrupt handling on my current code (that works fine on some systems) or to try to change to MSI Interrupts ?
Do you think the problem is in my Interrupt handling code or the System’s PCIe Bus Driver is overwhelmed by interrupts and does not call my ISR ?
In addition to setting the registry and the.inf file for the driver to work with MSI , is the code change a problem in what concerns the 6612 current firmware ?