lkml.org 
[lkml]   [2017]   [May]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    Subjecttty: closing n_gsm line discipline always times out
    Hi All,

    When the n_gsm line discipline is closed it wants to shutdown the line
    discipline properly and asks the link partner to end the mux protocol. This is
    done in gsm_cleanup_mux() around line 2050 in n_gsm.c:

    if (dlci) {
    gc = gsm_control_send(gsm, CMD_CLD, NULL, 0);
    if (gc)
    gsm_control_wait(gsm, gc);
    }

    The call stack is like this:

    (struct tty_ldisc_ops).close
    -> gsmld_close
    -> gsmld_detach_gsm
    -> gsm_cleanup_mux

    (struct tty_ldisc_ops).close is called at tty_release time or when the line
    discipline is changed. At tty_release time the tty is already shutdown, so we
    cannot send anything anymore. In this case our link partner never closes the
    mux protocol, which means we can never re-open it again. When instead the line
    discipline is changed back to N_TTY to close the protocol, gsm_control_send
    works fine, but the tty_ldisc is locked and thus the chars received by the UART
    never make it to the line discipline and gsm_control_wait times out.

    There's obviously something wrong here. Any ideas how to fix that? When we are
    not allowed to send/receive at tty_release time, do we need a new n_gsm specific
    ioctl to shutdown the mux?

    Sascha

    --
    Pengutronix e.K. | |
    Industrial Linux Solutions | http://www.pengutronix.de/ |
    Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
    Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |

    \
     
     \ /
      Last update: 2017-05-17 15:45    [W:3.853 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site