On 19/04/2017 13:19, Mason wrote: > My biggest problem is that tango_unmask() is never called. FTR, the missing incantation was: Explicitly calling tango_{mask/unmask/ack} from the corresponding msi_{mask/unmask/ack} Marc, I have one nagging doubt, wrt splitting MSI line selection and MSI enable. tango_irq_domain_alloc : finds an available MSI 'j' to allocate tango_irq_domain_free : release MSI 'j' tango_unmask : enable MSI 'j' tango_mask : disable MSI 'j' Is the following scenario guaranteed to never happen? tango_irq_domain_alloc // alloc 0 tango_irq_domain_free // free 0 tango_irq_domain_alloc // alloc 0 tango_unmask // enable 0 tango_unmask // enable 0 = NOP tango_mask // disable 0 In this theoretical scenario, we would be left with a non-functional MSI 0. Regards.