The patch titled
     i4l: Fix random hard freeze with AVM c4 card
has been added to the -mm tree.  Its filename is
     fix-random-hard-freeze-with-avm-c4-card.patch

*** Remember to use Documentation/SubmitChecklist when testing your code ***

See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find
out what to do about this

------------------------------------------------------
Subject: i4l: Fix random hard freeze with AVM c4 card
From: Karsten Keil <[EMAIL PROTECTED]>

The patch
- Includes the call to capilib_data_b3_req in the spinlock. This routine
  in turn calls the offending mq_enqueue routine that triggered the
  freeze if not locked.  This should also fix other indicators of
  incosistent capilib_msgidqueue list, that trigger messages like:
  Oct  5 03:05:57 BERL0 kernel: kcapi: msgid 3019 ncci 0x30301 not on queue
  that we saw several times a day (usually several in a row).
- Fixes all occurrences of c4_dispatch_tx to be called with active
  spinlock, there were some instances where no lock was active. Mostly
  these are in very infrequently called routines, so the additional
  performance penalty is minimal.

Signed-off-by: Karsten Keil <[EMAIL PROTECTED]>
Signed-off-by: Rainer Brestan <[EMAIL PROTECTED]>
Signed-off-by: Ralf Schlatterbeck <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---

 drivers/isdn/hardware/avm/c4.c |   14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff -puN 
drivers/isdn/hardware/avm/c4.c~fix-random-hard-freeze-with-avm-c4-card 
drivers/isdn/hardware/avm/c4.c
--- a/drivers/isdn/hardware/avm/c4.c~fix-random-hard-freeze-with-avm-c4-card
+++ a/drivers/isdn/hardware/avm/c4.c
@@ -727,6 +727,7 @@ static void c4_send_init(avmcard *card)
 {
        struct sk_buff *skb;
        void *p;
+       unsigned long flags;
 
        skb = alloc_skb(15, GFP_ATOMIC);
        if (!skb) {
@@ -744,12 +745,15 @@ static void c4_send_init(avmcard *card)
        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);
@@ -766,7 +770,9 @@ static int queue_sendconfigword(avmcard 
        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;
 }
 
@@ -986,7 +992,9 @@ static void c4_release_appl(struct capi_
        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);
@@ -1019,7 +1027,8 @@ static u16 c4_send_message(struct capi_c
        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),
@@ -1027,10 +1036,9 @@ static u16 c4_send_message(struct capi_c
        }
        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;
 }
 
_

Patches currently in -mm which might be from [EMAIL PROTECTED] are

origin.patch
fix-random-freezes-with-avm-b1-drivers.patch
fix-random-hard-freeze-with-avm-c4-card.patch

-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to