'port forced close' after failed ppp
Colin Helliwell
colin.helliwell at ln-systems.com
Wed Mar 15 15:36:42 UTC 2017
> On 14 March 2017 at 17:55 Dan Williams <dcbw at redhat.com> wrote:
>
> On Tue, 2017-03-14 at 14:18 +0000, Colin Helliwell wrote:
>
> > Still trying to get to the bottom of this problem.
> > What are the events which can cause the G_IO_HUP (in MM)?
>
> G_IO_HUP == POLLHUP from the standard C library (see
> /usr/include/bits/poll.h). It's coming directly from the kernel fd for
> the serial port, which in turn comes directly from the driver and the
> TTY subsystem. See drivers/tty/n_tty.c which is the default serial
> line discipline on Linux (IIRC).
>
> The places n_tty sets POLLHUP are both in n_tty_poll():
>
> if (test_bit(TTY_OTHER_CLOSED, &tty->flags))
> mask |= POLLHUP;
> ** this one doesn't apply, since it's only set by drivers/tty/pty.c and
> we don't use pseudo-ttys for modem stuff.
>
> if (tty_hung_up_p(file))
> mask |= POLLHUP;
>
> tty_hung_up_p() will only return true if __tty_hangup() has been
> called, which can happen from:
>
> 1) tty_vhangup(): called on USB device disconnect, UART port removal
> (called from a lot of UART drivers, maybe yours?), from TIOCVHANGUP,
> and a couple other places. Could be the culprit.
>
> 2) tty_hangup(): called from uart_handle_dcd_change() (which shouldn't
> affect anything that sets CLOCAL, but who knows...), and
> tty_port_tty_hangup(). This last one is called mostly from serial
> drivers when the DCD has changed.
>
> Check your mux driver, does it do any calls to tty_port_tty_hangup() or
> tty_hangup()?
>
> Dan
>
No sign in the source of any calls to those functions.
Could the signal be being sent from a hardware and 'physical uart driver' level (e.g. due to h/w handshake lines changing), to MM, without going through the mux driver...?
More information about the ModemManager-devel
mailing list