dev_kfree_skb() can end up calling local_bh_enable() which goes BUG if local
interrupts are disabled. Apparently it can deadlock.
So move the skb freeing outside the lock in the dmfe driver. It will
decrease the lock hold time as well.
if ( db->tx_queue_cnt < TX_FREE_DESC_CNT )
netif_wake_queue(dev);
- /* free this SKB */
- dev_kfree_skb(skb);
-
/* Restore CR7 to enable interrupt */
spin_unlock_irqrestore(&db->lock, flags);
outl(db->cr7_data, dev->base_addr + DCR7);
+ /* free this SKB */
+ dev_kfree_skb(skb);
+
return 0;
}