Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 10 Aug 2003 15:16:59 -0400
From:      Don Bowman <don@sandvine.com>
To:        Don Bowman <don@sandvine.com>, "'freebsd-hackers@freebsd.org'" <freebsd-hackers@freebsd.org>
Subject:   RE: hang in sio driver when interrupt occurs while in siocnputc()
Message-ID:  <FE045D4D9F7AED4CBFF1B3B813C8533702742207@mail.sandvine.com>

next in thread | raw e-mail | index | archive | help
I propose this patch, which solves my issue. Comments?

$ cvs diff -U3 sio.c 
Index: sio.c
===================================================================
RCS file: /usr/cvs/src/sys/isa/Attic/sio.c,v
retrieving revision 1.291.2.33.1000.4
diff -U3 -r1.291.2.33.1000.4 sio.c
--- sio.c       13 May 2003 23:51:23 -0000      1.291.2.33.1000.4
+++ sio.c       10 Aug 2003 18:11:37 -0000
@@ -274,6 +274,7 @@
        struct termios  lt_in;  /* should be in struct tty */
        struct termios  lt_out;
 
+       bool_t  in_polled_mode;
        bool_t  do_timestamp;
        bool_t  do_dcd_timestamp;
        struct timeval  timestamp;
@@ -1985,6 +1986,10 @@
        struct  timecounter *tc;
        u_int   count;
 
+       if (com->in_polled_mode) {
+               return;
+       }
+
        int_ctl = inb(com->intr_ctl_port);
        int_ctl_new = int_ctl;
 
@@ -3085,6 +3090,9 @@
        sp->ier = inb(iobase + com_ier);
        outb(iobase + com_ier, 0);      /* spltty() doesn't stop siointr()
*/
        siocntxwait(iobase);
+       if (com_addr(comconsole)) {
+           (com_addr(comconsole))->in_polled_mode = TRUE;
+       }
        sp->cfcr = inb(iobase + com_cfcr);
        outb(iobase + com_cfcr, CFCR_DLAB | CFCR_8BITS);
        sp->dlbl = inb(iobase + com_dlbl);
@@ -3132,6 +3140,9 @@
         */
        outb(iobase + com_mcr, sp->mcr | MCR_DTR | MCR_RTS);
        outb(iobase + com_ier, sp->ier);
+       if (com_addr(comconsole)) {
+           (com_addr(comconsole))->in_polled_mode = FALSE;
+       }
 }
 
 static void



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?FE045D4D9F7AED4CBFF1B3B813C8533702742207>