• Tony Lindgren's avatar
    tty: n_gsm: Fix long delays with control frame timeouts in ADM mode · 923dafb3
    Tony Lindgren authored
    BugLink: http://bugs.launchpad.net/bugs/1768825
    
    commit e9ec2254 upstream.
    
    Commit ea3d8465 ("tty: n_gsm: Allow ADM response in addition to UA for
    control dlci") added support for DLCI to stay in Asynchronous Disconnected
    Mode (ADM). But we still get long delays waiting for commands to other
    DLCI to complete:
    
    --> 5) C: SABM(P)
    Q>  0) C: UIH(F)
    Q>  0) C: UIH(F)
    Q>  0) C: UIH(F)
    ...
    
    This happens because gsm_control_send() sets cretries timer to T2 that is
    by default set to 34. This will cause resend for T2 times for the control
    frame. In ADM mode, we will never get a response so the control frame, so
    retries are just delaying all the commands.
    
    Let's fix the issue by setting DLCI_MODE_ADM flag after detecting the ADM
    mode for the control DLCI. Then we can use that in gsm_control_send() to
    set retries to 1. This means the control frame will be sent once allowing
    the other end at an opportunity to switch from ADM to ABM mode.
    
    Note that retries will be decremented in gsm_control_retransmit() so
    we don't want to set it to 0 here.
    
    Fixes: ea3d8465 ("tty: n_gsm: Allow ADM response in addition to UA for control dlci")
    Cc: linux-serial@vger.kernel.org
    Cc: Alan Cox <alan@llwyncelyn.cymru>
    Cc: Dan Williams <dcbw@redhat.com>
    Cc: Jiri Prchal <jiri.prchal@aksignal.cz>
    Cc: Jiri Slaby <jslaby@suse.cz>
    Cc: Marcel Partap <mpartap@gmx.net>
    Cc: Merlijn Wajer <merlijn@wizzup.org>
    Cc: Michael Nazzareno Trimarchi <michael@amarulasolutions.com>
    Cc: Michael Scott <michael.scott@linaro.org>
    Cc: Pavel Machek <pavel@ucw.cz>
    Cc: Peter Hurley <peter@hurleysoftware.com>
    Cc: Russ Gorby <russ.gorby@intel.com>
    Cc: Sascha Hauer <s.hauer@pengutronix.de>
    Cc: Sebastian Reichel <sre@kernel.org>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: default avatarJuerg Haefliger <juergh@canonical.com>
    Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
    923dafb3
n_gsm.c 79.6 KB