Index: dev/uart/uart_dev_ns8250.c =================================================================== --- dev/uart/uart_dev_ns8250.c (revision 247078) +++ dev/uart/uart_dev_ns8250.c (working copy) @@ -65,6 +65,8 @@ (void)uart_getreg(bas, REG_DATA); else if (iir == IIR_MLSC) (void)uart_getreg(bas, REG_MSR); + else if (iir == IIR_BUSY) + (void)uart_getreg(bas, 31); uart_barrier(bas); iir = uart_getreg(bas, REG_IIR); } @@ -592,10 +594,18 @@ bas = &sc->sc_bas; uart_lock(sc->sc_hwmtx); iir = uart_getreg(bas, REG_IIR); + + if ((iir & IIR_BUSY) == IIR_BUSY) { + (void)uart_getreg(bas, 31); + uart_unlock(sc->sc_hwmtx); + return (0); + } + if (iir & IIR_NOPEND) { uart_unlock(sc->sc_hwmtx); return (0); } + ipend = 0; if (iir & IIR_RXRDY) { lsr = uart_getreg(bas, REG_LSR);