1. 10 4月, 2009 1 次提交
  2. 11 12月, 2008 1 次提交
    • A
      MN10300: Discard low-priority Tx interrupts when closing an on-chip serial port · a8893fb3
      Akira Takeuchi 提交于
      Discard low-prioriy Tx interrupts when closing an MN10300 on-chip serial port.
      
      The MN10300 on-chip serial port uses three interrupts to manage its serial
      ports:
      
       (1) A very high priority interrupt that drives virtual DMA for Rx.
      
       (2) A very high priority interrupt that drives virtual DMA for Tx.
      
       (3) A normal priority virtual interrupt that does the normal UART interrupt
           stuff and is shared between Rx and Tx.
      
      mn10300_serial_stop_tx() only disables the high priority Tx interrupt.  It
      doesn't also disable the normal priority one because it is shared with Rx.
      
      However, the high priority interrupt may interrupt local_irq_disabled()
      sections, and so may have queued up a low priority virtual interrupt whilst the
      UART driver is asking for the Tx interrupt to be disabled.
      
      The result of this can be an oops when we try to process the interrupt in
      mn10300_serial_transmit_interrupt() as port->uart.info and port->uart.info->tty
      may have gone away.
      
      To deal with this, if either of those pointers is NULL, we make sure the
      high-priority Tx interrupt is disabled and discard the interrupt.  The low
      priority interrupt is disabled by the mn10300_serial_pic irq_chip table.
      Signed-off-by: NAkira Takeuchi <takeuchi.akr@jp.panasonic.com>
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a8893fb3
  3. 24 8月, 2008 1 次提交
  4. 21 7月, 2008 1 次提交
  5. 09 2月, 2008 1 次提交