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