aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/mISDN
diff options
context:
space:
mode:
authorKarsten Keil <kkeil@linux-pingi.de>2012-05-15 19:51:02 -0400
committerDavid S. Miller <davem@davemloft.net>2012-05-16 15:22:29 -0400
commit8bfddfbe2100862fd39b97001d0559ccd4c77f19 (patch)
tree587d69b18f6b7ed23eb02577f1d531c626c36216 /drivers/isdn/mISDN
parent1368112c07bae879fa3d1c21f236ca8eea3e5e84 (diff)
mISDN: Early confirm for transparent data
It is better to send a confirm for transparent data early as possible to avoid TX underuns. Signed-off-by: Karsten Keil <kkeil@linux-pingi.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn/mISDN')
-rw-r--r--drivers/isdn/mISDN/hwchannel.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/isdn/mISDN/hwchannel.c b/drivers/isdn/mISDN/hwchannel.c
index c74c363554c4..5c5ab478f66a 100644
--- a/drivers/isdn/mISDN/hwchannel.c
+++ b/drivers/isdn/mISDN/hwchannel.c
@@ -272,7 +272,7 @@ get_next_dframe(struct dchannel *dch)
272} 272}
273EXPORT_SYMBOL(get_next_dframe); 273EXPORT_SYMBOL(get_next_dframe);
274 274
275void 275static void
276confirm_Bsend(struct bchannel *bch) 276confirm_Bsend(struct bchannel *bch)
277{ 277{
278 struct sk_buff *skb; 278 struct sk_buff *skb;
@@ -294,7 +294,6 @@ confirm_Bsend(struct bchannel *bch)
294 skb_queue_tail(&bch->rqueue, skb); 294 skb_queue_tail(&bch->rqueue, skb);
295 schedule_event(bch, FLG_RECVQUEUE); 295 schedule_event(bch, FLG_RECVQUEUE);
296} 296}
297EXPORT_SYMBOL(confirm_Bsend);
298 297
299int 298int
300get_next_bframe(struct bchannel *bch) 299get_next_bframe(struct bchannel *bch)
@@ -305,8 +304,8 @@ get_next_bframe(struct bchannel *bch)
305 if (bch->tx_skb) { 304 if (bch->tx_skb) {
306 bch->next_skb = NULL; 305 bch->next_skb = NULL;
307 test_and_clear_bit(FLG_TX_NEXT, &bch->Flags); 306 test_and_clear_bit(FLG_TX_NEXT, &bch->Flags);
308 if (!test_bit(FLG_TRANSPARENT, &bch->Flags)) 307 /* confirm imediately to allow next data */
309 confirm_Bsend(bch); /* not for transparent */ 308 confirm_Bsend(bch);
310 return 1; 309 return 1;
311 } else { 310 } else {
312 test_and_clear_bit(FLG_TX_NEXT, &bch->Flags); 311 test_and_clear_bit(FLG_TX_NEXT, &bch->Flags);
@@ -395,6 +394,7 @@ bchannel_senddata(struct bchannel *ch, struct sk_buff *skb)
395 /* write to fifo */ 394 /* write to fifo */
396 ch->tx_skb = skb; 395 ch->tx_skb = skb;
397 ch->tx_idx = 0; 396 ch->tx_idx = 0;
397 confirm_Bsend(ch);
398 return 1; 398 return 1;
399 } 399 }
400} 400}