diff options
author | Karsten Keil <kkeil@linux-pingi.de> | 2012-05-15 19:51:02 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-05-16 15:22:29 -0400 |
commit | 8bfddfbe2100862fd39b97001d0559ccd4c77f19 (patch) | |
tree | 587d69b18f6b7ed23eb02577f1d531c626c36216 /drivers/isdn/mISDN | |
parent | 1368112c07bae879fa3d1c21f236ca8eea3e5e84 (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.c | 8 |
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 | } |
273 | EXPORT_SYMBOL(get_next_dframe); | 273 | EXPORT_SYMBOL(get_next_dframe); |
274 | 274 | ||
275 | void | 275 | static void |
276 | confirm_Bsend(struct bchannel *bch) | 276 | confirm_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 | } |
297 | EXPORT_SYMBOL(confirm_Bsend); | ||
298 | 297 | ||
299 | int | 298 | int |
300 | get_next_bframe(struct bchannel *bch) | 299 | get_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 | } |