@@ -2198,6 +2198,10 @@ int serial8250_do_startup(struct uart_port *port)
2198
2198
2199
2199
if (port -> irq && !(up -> port .flags & UPF_NO_THRE_TEST )) {
2200
2200
unsigned char iir1 ;
2201
+
2202
+ if (port -> irqflags & IRQF_SHARED )
2203
+ disable_irq_nosync (port -> irq );
2204
+
2201
2205
/*
2202
2206
* Test for UARTs that do not reassert THRE when the
2203
2207
* transmitter is idle and the interrupt has already
@@ -2207,8 +2211,6 @@ int serial8250_do_startup(struct uart_port *port)
2207
2211
* allow register changes to become visible.
2208
2212
*/
2209
2213
spin_lock_irqsave (& port -> lock , flags );
2210
- if (up -> port .irqflags & IRQF_SHARED )
2211
- disable_irq_nosync (port -> irq );
2212
2214
2213
2215
wait_for_xmitr (up , UART_LSR_THRE );
2214
2216
serial_port_out_sync (port , UART_IER , UART_IER_THRI );
@@ -2220,9 +2222,10 @@ int serial8250_do_startup(struct uart_port *port)
2220
2222
iir = serial_port_in (port , UART_IIR );
2221
2223
serial_port_out (port , UART_IER , 0 );
2222
2224
2225
+ spin_unlock_irqrestore (& port -> lock , flags );
2226
+
2223
2227
if (port -> irqflags & IRQF_SHARED )
2224
2228
enable_irq (port -> irq );
2225
- spin_unlock_irqrestore (& port -> lock , flags );
2226
2229
2227
2230
/*
2228
2231
* If the interrupt is not reasserted, or we otherwise
0 commit comments