@@ -2275,6 +2275,10 @@ int serial8250_do_startup(struct uart_port *port)
22752275
22762276 if (port -> irq && !(up -> port .flags & UPF_NO_THRE_TEST )) {
22772277 unsigned char iir1 ;
2278+
2279+ if (port -> irqflags & IRQF_SHARED )
2280+ disable_irq_nosync (port -> irq );
2281+
22782282 /*
22792283 * Test for UARTs that do not reassert THRE when the
22802284 * transmitter is idle and the interrupt has already
@@ -2284,8 +2288,6 @@ int serial8250_do_startup(struct uart_port *port)
22842288 * allow register changes to become visible.
22852289 */
22862290 spin_lock_irqsave (& port -> lock , flags );
2287- if (up -> port .irqflags & IRQF_SHARED )
2288- disable_irq_nosync (port -> irq );
22892291
22902292 wait_for_xmitr (up , UART_LSR_THRE );
22912293 serial_port_out_sync (port , UART_IER , UART_IER_THRI );
@@ -2297,9 +2299,10 @@ int serial8250_do_startup(struct uart_port *port)
22972299 iir = serial_port_in (port , UART_IIR );
22982300 serial_port_out (port , UART_IER , 0 );
22992301
2302+ spin_unlock_irqrestore (& port -> lock , flags );
2303+
23002304 if (port -> irqflags & IRQF_SHARED )
23012305 enable_irq (port -> irq );
2302- spin_unlock_irqrestore (& port -> lock , flags );
23032306
23042307 /*
23052308 * If the interrupt is not reasserted, or we otherwise
0 commit comments