]> err.no Git - linux-2.6/blobdiff - drivers/isdn/gigaset/asyncdata.c
[PATCH] AT91RM9200 Ethernet #4: Suspend/Resume
[linux-2.6] / drivers / isdn / gigaset / asyncdata.c
index 4f5dd9cf9e1bd1920f6944e3f9d367a80cd7697b..ce3cd77094b334f8e362ca67404c8ab1baa2ffbd 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2005 by Tilman Schmidt <tilman@imap.cc>,
  *                       Hansjoerg Lipp <hjlipp@web.de>,
- *                       Stefan Eilers <Eilers.Stefan@epost.de>.
+ *                       Stefan Eilers.
  *
  * =====================================================================
  *     This program is free software; you can redistribute it and/or
@@ -252,8 +252,7 @@ byte_stuff:
                                inputstate |= INS_skip_frame;
                                break;
                        }
-                       *gigaset_skb_put_quick(skb, 1) = c;
-                       /* *__skb_put (skb, 1) = c; */
+                       *__skb_put(skb, 1) = c;
                        fcs = crc_ccitt_byte(fcs, c);
                }
 
@@ -303,7 +302,7 @@ static inline int iraw_loop(unsigned char c, unsigned char *src, int numbytes,
                                inputstate |= INS_skip_frame;
                                break;
                        }
-                       *gigaset_skb_put_quick(skb, 1) = gigaset_invtab[c];
+                       *__skb_put(skb, 1) = gigaset_invtab[c];
                }
 
                if (unlikely(!numbytes))
@@ -567,19 +566,22 @@ static struct sk_buff *iraw_encode(struct sk_buff *skb, int head, int tail)
 int gigaset_m10x_send_skb(struct bc_state *bcs, struct sk_buff *skb)
 {
        unsigned len = skb->len;
+       unsigned long flags;
 
        if (bcs->proto2 == ISDN_PROTO_L2_HDLC)
                skb = HDLC_Encode(skb, HW_HDR_LEN, 0);
        else
                skb = iraw_encode(skb, HW_HDR_LEN, 0);
        if (!skb) {
-               dev_err(bcs->cs->dev,
-                       "unable to allocate memory for encoding!\n");
+               err("unable to allocate memory for encoding!\n");
                return -ENOMEM;
        }
 
        skb_queue_tail(&bcs->squeue, skb);
-       tasklet_schedule(&bcs->cs->write_tasklet);
+       spin_lock_irqsave(&bcs->cs->lock, flags);
+       if (bcs->cs->connected)
+               tasklet_schedule(&bcs->cs->write_tasklet);
+       spin_unlock_irqrestore(&bcs->cs->lock, flags);
 
        return len;     /* ok so far */
 }