On Mon, Aug 13, 2012 at 01:43:15PM +0100, Alan Cox wrote: > From: xiaojin <jin.xiao@xxxxxxxxx> > > In 3GPP27.010 5.8.1, it defined: > The TE multiplexer initiates the establishment of the multiplexer control channel by sending a SABM frame on DLCI 0 using the procedures of clause 5.4.1. > Once the multiplexer channel is established other DLCs may be established using the procedures of clause 5.4.1. > This patch implement 5.8.1 in MUX level, it make sure DLC0 is the first channel to be setup. > > [or for those not familiar with the specification: it was possible to try > and open a data connection while the control channel was not yet fully > open, which is a spec violation and confuses some modems] > > Signed-off-by: xiaojin <jin.xiao@xxxxxxxxx> > Tested-by: Yin, Fengwei <fengwei.yin@xxxxxxxxx> > [tweaked the order we check things and error code] > Signed-off-by: Alan Cox <alan@xxxxxxxxxxxxxxx> > Cc: The Horsebox <stable@xxxxxxxxxxxxxxx> > --- > > drivers/tty/n_gsm.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c > index 7a4bf30..5c6c2e2 100644 > --- a/drivers/tty/n_gsm.c > +++ b/drivers/tty/n_gsm.c > @@ -2889,6 +2889,10 @@ static int gsmtty_open(struct tty_struct *tty, struct file *filp) > gsm = gsm_mux[mux]; > if (gsm->dead) > return -EL2HLT; > + /* If DLCI 0 is not yet fully open return an error. This is ok from a locking > + perspective as we don't have to worry about this if DLCI0 is lost */ > + if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN) > + return -EL2NSYNC; Odd, what tree did you make this against? This applies in the gsmtty_init() function, not gsmtty_open(), is that correct? It also has a bunch of fuzz. I'll apply it, but can you verify I didn't do anything wrong? thanks, greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html