@@ -2205,6 +2205,10 @@ int serial8250_do_startup(struct uart_port *port)
22052205
22062206 if (port -> irq ) {
22072207 unsigned char iir1 ;
2208+
2209+ if (port -> irqflags & IRQF_SHARED )
2210+ disable_irq_nosync (port -> irq );
2211+
22082212 /*
22092213 * Test for UARTs that do not reassert THRE when the
22102214 * transmitter is idle and the interrupt has already
@@ -2214,8 +2218,6 @@ int serial8250_do_startup(struct uart_port *port)
22142218 * allow register changes to become visible.
22152219 */
22162220 spin_lock_irqsave (& port -> lock , flags );
2217- if (up -> port .irqflags & IRQF_SHARED )
2218- disable_irq_nosync (port -> irq );
22192221
22202222 wait_for_xmitr (up , UART_LSR_THRE );
22212223 serial_port_out_sync (port , UART_IER , UART_IER_THRI );
@@ -2227,9 +2229,10 @@ int serial8250_do_startup(struct uart_port *port)
22272229 iir = serial_port_in (port , UART_IIR );
22282230 serial_port_out (port , UART_IER , 0 );
22292231
2232+ spin_unlock_irqrestore (& port -> lock , flags );
2233+
22302234 if (port -> irqflags & IRQF_SHARED )
22312235 enable_irq (port -> irq );
2232- spin_unlock_irqrestore (& port -> lock , flags );
22332236
22342237 /*
22352238 * If the interrupt is not reasserted, or we otherwise
0 commit comments