Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 267346
b: refs/heads/master
c: 268e526
h: refs/heads/master
v: v3
  • Loading branch information
Mikhail Kshevetskiy authored and Greg Kroah-Hartman committed Sep 26, 2011
1 parent 304e174 commit bc9c55e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 28 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f37ac5a144027cddfcf1dfab30eb7c2ba765f5ca
refs/heads/master: 268e526b935e794386d75025577b745e6bd57f13
58 changes: 31 additions & 27 deletions trunk/drivers/tty/n_gsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -809,37 +809,41 @@ static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci)
{
struct gsm_msg *msg;
u8 *dp;
int len, size;
int len, total_size, size;
int h = dlci->adaption - 1;

len = kfifo_len(dlci->fifo);
if (len == 0)
return 0;

/* MTU/MRU count only the data bits */
if (len > gsm->mtu)
len = gsm->mtu;

size = len + h;

msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype);
/* FIXME: need a timer or something to kick this so it can't
get stuck with no work outstanding and no buffer free */
if (msg == NULL)
return -ENOMEM;
dp = msg->data;
switch (dlci->adaption) {
case 1: /* Unstructured */
break;
case 2: /* Unstructed with modem bits. Always one byte as we never
send inline break data */
*dp++ = gsm_encode_modem(dlci);
break;
total_size = 0;
while(1) {
len = kfifo_len(dlci->fifo);
if (len == 0)
return total_size;

/* MTU/MRU count only the data bits */
if (len > gsm->mtu)
len = gsm->mtu;

size = len + h;

msg = gsm_data_alloc(gsm, dlci->addr, size, gsm->ftype);
/* FIXME: need a timer or something to kick this so it can't
get stuck with no work outstanding and no buffer free */
if (msg == NULL)
return -ENOMEM;
dp = msg->data;
switch (dlci->adaption) {
case 1: /* Unstructured */
break;
case 2: /* Unstructed with modem bits. Always one byte as we never
send inline break data */
*dp++ = gsm_encode_modem(dlci);
break;
}
WARN_ON(kfifo_out_locked(dlci->fifo, dp , len, &dlci->lock) != len);
__gsm_data_queue(dlci, msg);
total_size += size;
}
WARN_ON(kfifo_out_locked(dlci->fifo, dp , len, &dlci->lock) != len);
__gsm_data_queue(dlci, msg);
/* Bytes of data we used up */
return size;
return total_size;
}

/**
Expand Down

0 comments on commit bc9c55e

Please sign in to comment.