On Thu, 24 Mar 2011, Thomas Gleixner wrote: > > The ack used to be made in clear_ioasic_irq(), that was called from > > end_ioasic_dma_irq(), that was used as the .end handler. This semantics > > has to be preserved or hardware won't work anymore as expected. This is a > > regression. > > Then that code was broken before. Since MIPS was converted to the flow > handlers nothing ever called .end(). I seem to miss something. Hmm, me too then. Whoever did the conversion failed to adjust this piece or at least notify responsible people that such a change is needed -- if .end was going away, then all users should have been checked and the respective maintainers queried. And given these DMA interrupts are really only in regular use by Linux with the onboard SCSI driver, chances are the breakage could be left unnoticed for a long time (I tend to run these systems NFS-rooted for once). Note these effectively are edge-triggered interrupts and may only be acked in hardware once all higher-level processing has been done as otherwise a DMA transfer will resume prematurely and all the hell will break loose. I don't particularly like this double purpose these bits have, but there you go -- I can understand the hw engineers saw no reason to waste silicon for separate interrupt-ack and DMA-inhibit bits. I'll see what I can do about it, but I need a pointer to the offending change -- Ralf or anyone, can you provide me with one? Maciej