Ok. I´ve found it. The MSI interrupt type uses its end() handler to acknowledge the interrupt using ack_APIC_irq() (drivers/pci/msi.c). Xenomai uses the ack() handler to expedite the acknowledgement of an IRQ. In case of MSI, ack() is a NOP.
The main problem is that Xenomai redefines ack_APIC_irq() calls (they
become NOPs, as defined in apic.h). Maybe the ISRs used so far never
issued ack_APIC_irq() themselves, and used always the IO-APIC (which
contains the correct __ack_APIC_irq() call) ?
I feel a bit awkward about changing msi.c .
Any opinions about how to change Xenomai / Linux ?
- Re: [Xenomai-core] Handling PCI MSI interrupts Jeroen Van den Keybus
- Re: [Xenomai-core] Handling PCI MSI interrupts Philippe Gerum
- Re: [Xenomai-core] Handling PCI MSI interru... Jeroen Van den Keybus
- RE: [Xenomai-core] Handling PCI MSI interru... Russell Johnson