Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Jan 1995 16:26:25 +0100 (MET)
From:      Luigi Rizzo <luigi@labinfo.iet.unipi.it>
To:        hackers@FreeBSD.org
Subject:   sio.c...
Message-ID:  <199501201526.QAA07101@labinfo.iet.unipi.it>

next in thread | raw e-mail | index | archive | help
Two questions about sio.c on FreeBSD 1.1.5

The first is easy, and deals with avoding the problem with processes
which are not able to exit in case of hardware problems.

In sioclose(), on 2.0R the call to the line_close routine is surrounded
by a timeout/untimeout pair:

	timeout(wakeup, TSA_OCOMPLETE(tp), 60 * hz);
	(*linesw[tp->t_line].l_close)(tp, flag);
	untimeout(wakeup, TSA_OCOMPLETE(tp));

while 1.1.5R has only the call to l_close. Would it be possible to add
the calls to timeout/untimeout on 1.1.5, or there are other changes
needed ?

[I know there are comments which say that the solution is far from
being optimal; however, it would at least save me rebooting the system
every time!]

--- second question---

On the same 1.1.5 system here, I found out that a process here keeps
blocking with WCHAN="siotx" (this happens with mgetty, when a
particolar user drops the session, probably not in the most
appropriate way). "siotx" seems to be present only in sio.c, function
comparam(tp, t), in the following section of code, which is exactly the
same as in 2.0R (I have no current sources handy):

        disable_intr();
retry:
        com->state &= ~CS_TTGO;
        enable_intr();
        while ((inb(com->line_status_port) & (LSR_TSRE | LSR_TXRDY))
               != (LSR_TSRE | LSR_TXRDY)) {
                error = ttysleep(tp, TSA_OCOMPLETE(tp), TTIPRI | PCATCH,
                                 "siotx", hz / 100);
                if (error != 0 && error != EAGAIN) {
                        if (!(tp->t_state & TS_TTSTOP)) {
                                disable_intr();
                                com->state |= CS_TTGO;
                                enable_intr();
                        }
                        splx(s);
                        return (error);
                }
        }


from which it appears that there is no timeout or other way out in case
the modem is not responding properly. Wouldn't it be better to add an
emergemcy exit after a proper timeout ?

	Luigi
====================================================================
Luigi Rizzo                     Dip. di Ingegneria dell'Informazione
email: luigi@iet.unipi.it       Universita' di Pisa
tel: +39-50-568533              via Diotisalvi 2, 56126 PISA (Italy)
fax: +39-50-568522
====================================================================



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