Multiple MSI-x support on MacOS 10.13

Hi,

I am developing an driver which needs to use multiple MSI-x. I rebuilt IOPCIFamily with flag SUPPORT_MULTIPLE_MSI to properly configure every vector (without it, the data for each one in vector table was 0). The problem is as follows:

Whenever two interrupts are registered using IOService::registerInterrupt(), the handlers for both of the irqs are not being executed. The issue comes when using IOInterruptEventSource and without it.

As soon as the interrupts are unregistered by calling IOService::unregisterInterrupt(), so only single MSI-x is registered, the handler is being executed again.


I was investigating the code for IOMessagedInterruptController and IOPCIDevice and it seems that IOPCIFamily is supporting multiple MSI-x.


Does anyone come with similar issue?

How did you re-build iopcifamily? I was seeing several compilation issues.

You must build the xnu in order to build IOPCIFamily properly.

Multiple MSI-x support on MacOS 10.13
 
 
Q