Indeed will the in_irq() test will force dev_kfree_skb_any() to call
dev_kfree_skb_irq().
The kernel warning before this patch was applied, was also trigged by
a WARN_ON_ONCE(in_irq()).
I think David is right on this one.
On Tue, Nov 22, 2011 at 9:54 PM, David Miller [off-list ref] wrote:
From: Peter P Waskiewicz Jr <redacted>
Date: Mon, 21 Nov 2011 15:17:33 -0800
quoted
I suspect the "right" way to fix this is to call dev_kfree_skb_any(skb);
instead, since that will handle the in-interrupt case if that's where
we're stuck.
Caller is always b44_poll(), and that caller always does spin_lock_irqsave().
Adding the extra tests implied by dev_kfree_skb_any() therefore doesn't
make any sense, as it will always evaluate to dev_kfree_skb_irq().