@@ -2275,6 +2275,10 @@ int serial8250_do_startup(struct uart_port *port)
2275
2275
2276
2276
if (port -> irq && !(up -> port .flags & UPF_NO_THRE_TEST )) {
2277
2277
unsigned char iir1 ;
2278
+
2279
+ if (port -> irqflags & IRQF_SHARED )
2280
+ disable_irq_nosync (port -> irq );
2281
+
2278
2282
/*
2279
2283
* Test for UARTs that do not reassert THRE when the
2280
2284
* transmitter is idle and the interrupt has already
@@ -2284,8 +2288,6 @@ int serial8250_do_startup(struct uart_port *port)
2284
2288
* allow register changes to become visible.
2285
2289
*/
2286
2290
spin_lock_irqsave (& port -> lock , flags );
2287
- if (up -> port .irqflags & IRQF_SHARED )
2288
- disable_irq_nosync (port -> irq );
2289
2291
2290
2292
wait_for_xmitr (up , UART_LSR_THRE );
2291
2293
serial_port_out_sync (port , UART_IER , UART_IER_THRI );
@@ -2297,9 +2299,10 @@ int serial8250_do_startup(struct uart_port *port)
2297
2299
iir = serial_port_in (port , UART_IIR );
2298
2300
serial_port_out (port , UART_IER , 0 );
2299
2301
2302
+ spin_unlock_irqrestore (& port -> lock , flags );
2303
+
2300
2304
if (port -> irqflags & IRQF_SHARED )
2301
2305
enable_irq (port -> irq );
2302
- spin_unlock_irqrestore (& port -> lock , flags );
2303
2306
2304
2307
/*
2305
2308
* If the interrupt is not reasserted, or we otherwise
0 commit comments