Russell King wrote:
> Having upgraded from 2.6.16 to 2.6.22-rc6, I'm now seeing the following.
>
> Looks like netfilter is calling local_bh_enable() with IRQs disabled,
> which would appear to be illegal.  Thankfully, this is a warn-once
> warning.
>
> WARNING: at /home/rmk/git/linux-2.6-rmk/kernel/softirq.c:138 local_bh_enable()
> [...]
> [<
c01447fc>] (nf_conntrack_destroy+0x0/0x2c) from [<
c012c05c>] (__kfree_skb+0xd0/0x100)
> [<
c012bf8c>] (__kfree_skb+0x0/0x100) from [<
c012c0d8>] (kfree_skb+0x4c/0x50)
>  r5:
c12a3800 r4:
00000300
> [<
c012c08c>] (kfree_skb+0x0/0x50) from [<
bf03cbb0>] (el3_start_xmit+0xb8/0xd0 [3c589_cs])
> [<
bf03caf8>] (el3_start_xmit+0x0/0xd0 [3c589_cs]) from [<
c01324dc>] (dev_hard_start_xmit+0x1a8/0x244)
>  r7:
c12a3800 r6:
c1a9aa00 r5:
c1a9aa00 r4:
c12a3800
> [<
c0132334>] (dev_hard_start_xmit+0x0/0x244) from [<
c013fcc0>] (__qdisc_run+0xb0/0x198)
Thats a bug in the 3c589_cs driver. Patch attached.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
        outw(SetTxThreshold + 1536, ioaddr + EL3_CMD);
     }
 
-    dev_kfree_skb(skb);
     pop_tx_status(dev);
     spin_unlock_irqrestore(&priv->lock, flags);    
+    dev_kfree_skb(skb);
     
     return 0;
 }