{
        struct sk_buff *skb;
        void *p;
+       unsigned long flags;
 
        skb = alloc_skb(15, GFP_ATOMIC);
        if (!skb) {
        skb_put(skb, (u8 *)p - (u8 *)skb->data);
 
        skb_queue_tail(&card->dma->send_queue, skb);
+       spin_lock_irqsave(&card->lock, flags);
        c4_dispatch_tx(card);
+       spin_unlock_irqrestore(&card->lock, flags);
 }
 
 static int queue_sendconfigword(avmcard *card, u32 val)
 {
        struct sk_buff *skb;
+       unsigned long flags;
        void *p;
 
        skb = alloc_skb(3+4, GFP_ATOMIC);
        skb_put(skb, (u8 *)p - (u8 *)skb->data);
 
        skb_queue_tail(&card->dma->send_queue, skb);
+       spin_lock_irqsave(&card->lock, flags);
        c4_dispatch_tx(card);
+       spin_unlock_irqrestore(&card->lock, flags);
        return 0;
 }
 
        struct sk_buff *skb;
        void *p;
 
+       spin_lock_irqsave(&card->lock, flags);
        capilib_release_appl(&cinfo->ncci_head, appl);
+       spin_unlock_irqrestore(&card->lock, flags);
 
        if (ctrl->cnr == card->cardnr) {
                skb = alloc_skb(7, GFP_ATOMIC);
        u16 retval = CAPI_NOERROR;
        unsigned long flags;
 
-       if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_REQ) {
+       spin_lock_irqsave(&card->lock, flags);
+       if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_REQ) {
                retval = capilib_data_b3_req(&cinfo->ncci_head,
                                             CAPIMSG_APPID(skb->data),
                                             CAPIMSG_NCCI(skb->data),
        }
        if (retval == CAPI_NOERROR) {
                skb_queue_tail(&card->dma->send_queue, skb);
-               spin_lock_irqsave(&card->lock, flags);
                c4_dispatch_tx(card);
-               spin_unlock_irqrestore(&card->lock, flags);
        }
+       spin_unlock_irqrestore(&card->lock, flags);
        return retval;
 }