On 20/04/17 09:20, Mason wrote: > 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} Using irq_chip_mask_parent and co, you mean? > 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. I'm not sure I get the example above, and what the various alloc/free calls have to do with anything. If you have unbalanced enable/disable_irq, you loose. Don't do that. M. -- Jazz is not dead. It just smells funny...