1. 27 Apr, 2008 1 commit
    • David S. Miller's avatar
      sparc64: Fix wedged irq regression. · 227c3311
      David S. Miller authored
      Kernel bugzilla 10273
      
      As reported by Jos van der Ende, ever since commit
      5a606b72 ("[SPARC64]: Do not ACK an
      INO if it is disabled or inprogress.") sun4u interrupts
      can get stuck.
      
      What this changset did was add the following conditional to
      the various IRQ chip ->enable() handlers on sparc64:
      
      	if (unlikely(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS)))
      		return;
      
      which is correct, however it means that special care is needed
      in the ->enable() method.
      
      Specifically we must put the interrupt into IDLE state during
      an enable, or else it might never be sent out again.
      
      Setting the INO interrupt state to IDLE resets the state machine,
      the interrupt input to the INO is retested by the hardware, and
      if an interrupt is being signalled by the device, the INO
      moves back into TRANSMIT state, and an interrupt vector is sent
      to the cpu.
      
      The two sun4v IRQ chip handlers were already doing this properly,
      only sun4u got it wrong.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      227c3311
  2. 26 Apr, 2008 39 commits