aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/gigaset/isocdata.c
diff options
context:
space:
mode:
authorTilman Schmidt <tilman@imap.cc>2009-10-25 05:29:57 -0400
committerDavid S. Miller <davem@davemloft.net>2009-10-29 04:37:09 -0400
commit4dd8230acd20cb456cae02696b3da2986faad258 (patch)
treeded49543277fdd72784ac7d2dd14311d39b4e4c9 /drivers/isdn/gigaset/isocdata.c
parent22077ebceb44f4097d4677e2a26bc1175143d647 (diff)
gigaset: fix bad assumptions about CAPI skbuffs
The CAPI interface incorrectly assumed that CAPI messages would always start at the beginning of the data buffer: fix by treating DATA_B3 messages as the link layer header to their payload data. This fix changes the way acknowledgement information is propagated through the hardware specific modules and thereby impacts the ISDN4Linux variant of the driver, too. Also some assumptions about methods not being called from interrupt context turned out to be unwarranted; fix by using dev_kfree_skb_any() wherever non-interrupt context isn't guaranteed. Impact: bugfix Signed-off-by: Tilman Schmidt <tilman@imap.cc> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn/gigaset/isocdata.c')
-rw-r--r--drivers/isdn/gigaset/isocdata.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/isdn/gigaset/isocdata.c b/drivers/isdn/gigaset/isocdata.c
index 7dabfd35874c..bc41611e541d 100644
--- a/drivers/isdn/gigaset/isocdata.c
+++ b/drivers/isdn/gigaset/isocdata.c
@@ -576,12 +576,12 @@ static inline void hdlc_done(struct bc_state *bcs)
576 dev_notice(cs->dev, "received short frame (%d octets)\n", 576 dev_notice(cs->dev, "received short frame (%d octets)\n",
577 procskb->len); 577 procskb->len);
578 bcs->hw.bas->runts++; 578 bcs->hw.bas->runts++;
579 dev_kfree_skb(procskb); 579 dev_kfree_skb_any(procskb);
580 gigaset_isdn_rcv_err(bcs); 580 gigaset_isdn_rcv_err(bcs);
581 } else if (bcs->fcs != PPP_GOODFCS) { 581 } else if (bcs->fcs != PPP_GOODFCS) {
582 dev_notice(cs->dev, "frame check error (0x%04x)\n", bcs->fcs); 582 dev_notice(cs->dev, "frame check error (0x%04x)\n", bcs->fcs);
583 bcs->hw.bas->fcserrs++; 583 bcs->hw.bas->fcserrs++;
584 dev_kfree_skb(procskb); 584 dev_kfree_skb_any(procskb);
585 gigaset_isdn_rcv_err(bcs); 585 gigaset_isdn_rcv_err(bcs);
586 } else { 586 } else {
587 len = procskb->len; 587 len = procskb->len;
@@ -985,7 +985,7 @@ void gigaset_isoc_input(struct inbuf_t *inbuf)
985 * Called by LL to queue an skb for sending, and start transmission if 985 * Called by LL to queue an skb for sending, and start transmission if
986 * necessary. 986 * necessary.
987 * Once the payload data has been transmitted completely, gigaset_skb_sent() 987 * Once the payload data has been transmitted completely, gigaset_skb_sent()
988 * will be called with the first cs->hw_hdr_len bytes of skb->head preserved. 988 * will be called with the skb's link layer header preserved.
989 * 989 *
990 * Return value: 990 * Return value:
991 * number of bytes accepted for sending (skb->len) if ok, 991 * number of bytes accepted for sending (skb->len) if ok,