I was reading the WDF book, and on page 545 there is a note:
“Important: Your driver’s interrupt service callback must be written so that it can share interrupt vectors or MSIs with another device…”
That didn’t sound right to me, since I thought I had read that one of the major advantages of MSI was that they did not have to be shared. But, I couldn’t remember where I read that, and after a little searching and found a thread on the NTDEV list (http://www.osronline.com/showThread.cfm?link=103738) in which Jake Oshins explicitly says that MSIs *can* be shared, and you have to code your ISR to handle that fact. Fair enough, that’s not too hard, though not as convenient as I thought MSIs would make it for me. I chalked it up to my imagination/wishful thinking.
Then, earlier today I was looking through the “Interrupt Architecture Enhancements in Microsoft Windows Vista”, and right there under the heading Advantages of Using Message-Signaled Interrupts it says:
"Because the number of potentially available MSIs is limited only to the number of interrupt dispatch table (IDT) entries that are available on a system, devices that implement MSIs do not have to share interrupts with other devices. As a result, interrupt latency may be lower and less subject to extreme variance. Interrupt processing overhead, as measured on a system-wide basis, is also lower. In addition, using MSI or MSI-X avoids the problems that are sometimes seen when a device is forced to share an interrupt with a driver that has design or coding defects in its ISR. Thus, using MSIs contributes to both enhanced system performance and greater overall system reliability.
Some devices use MSIs as an alternative to the use of line-based interrupts. As described previously, this ensures that the device does not have to share an interrupt with another device."
So, I’m *not* crazy for thinking that using MSIs meant that my device would not share interrupts with other devices… it says so right there in the documentation for using MSI with Windows Vista. I realize that this is probably just an example of documentation not evolving with the product, but I thought I’d point it out so that someone can update it so as to prevent the further spread of misinformation.
As an aside, I realize that even IDT entries are relatively scarce, so there is always the possibility that there will be more devices requesting MSIs than are available, but I had assumed that if there aren’t enough MSI resources to go around, then some devices would get (exclusive) MSI resources, and the rest would be stuck with a (shared) INTx resource, especially since they have to handle the INTx case anyway.
Thanks!
-phil