On Fri, Apr 08, 2016 at 12:16:03PM +0000, Visa Hankala wrote:
> Every now and then I see "spurious interrupt 34" messages on octeon
> serial console. The root cause seems to be in comstart() which enables
> the TX holding register empty interrupt before writing data to the TX
> register. If the register is empty initially, the early enabling can
> trigger a premature interrupt.
> 
> The message does not appear when the enabling is done after the data
> writing. The change has not caused ill effects on amd64, i386 and sgi
> machines that I used for testing. OK?

Any objections to this patch? The timing issue is generic, not specific
to octeon.

> Index: dev/ic/com.c
> ===================================================================
> RCS file: src/sys/dev/ic/com.c,v
> retrieving revision 1.158
> diff -u -p -r1.158 com.c
> --- dev/ic/com.c      14 Sep 2014 14:17:24 -0000      1.158
> +++ dev/ic/com.c      8 Apr 2016 10:11:59 -0000
> @@ -1013,12 +1013,6 @@ comstart(struct tty *tp)
>               bus_space_write_1(iot, ioh, com_isr, ISR_SEND);
>  #endif
>  
> -     /* Enable transmit completion interrupts. */
> -     if (!ISSET(sc->sc_ier, IER_ETXRDY)) {
> -             SET(sc->sc_ier, IER_ETXRDY);
> -             bus_space_write_1(iot, ioh, com_ier, sc->sc_ier);
> -     }
> -
>       if (ISSET(sc->sc_hwflags, COM_HW_FIFO)) {
>               u_char buffer[128];     /* largest fifo */
>               int i, n;
> @@ -1031,6 +1025,12 @@ comstart(struct tty *tp)
>               bzero(buffer, n);
>       } else if (tp->t_outq.c_cc != 0)
>               bus_space_write_1(iot, ioh, com_data, getc(&tp->t_outq));
> +
> +     /* Enable transmit completion interrupts. */
> +     if (!ISSET(sc->sc_ier, IER_ETXRDY)) {
> +             SET(sc->sc_ier, IER_ETXRDY);
> +             bus_space_write_1(iot, ioh, com_ier, sc->sc_ier);
> +     }
>  out:
>       splx(s);
>       return;
> 

Reply via email to