2011-01-19 09:44:02

by Daniel J Blueman

[permalink] [raw]
Subject: [2.6.38-rc1] iwlagn lock misuse...

Booting an instrumented 2.6.38-rc1 kernel with an Intel WiFi Link 5300
card and associating with an access point, I see a lockdep warning
[attached].

This is essentially (struct iwl_priv)->lock being taken with
interrupts disabled in iwl-agn-ict.c:152 [1] and the same lock taken
with interrupts enabled in rx.c:2476 [2] (confirmed via disassembly).

It feels like this would have been introduced in this commit:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=6e8cc38d5b05bb812f89a35bd9bf52405e67d0df

Shall I raise a kernel.org bugzilla entry?

Thanks,
Daniel

--- [1] iwl-agn-ict.c:152

static irqreturn_t iwl_isr(int irq, void *data)
{
struct iwl_priv *priv = data;
u32 inta, inta_mask;
unsigned long flags;
#ifdef CONFIG_IWLWIFI_DEBUG
u32 inta_fh;
#endif
if (!priv)
return IRQ_NONE;

spin_lock_irqsave(&priv->lock, flags); <---

--- [2] rx.c:2476

static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx)
{
ieee80211_rx_result res = RX_DROP_MONITOR;
struct sk_buff *skb;

#define CALL_RXH(rxh) \
do { \
res = rxh(rx); \
if (res != RX_CONTINUE) \
goto rxh_next; \
} while (0);

spin_lock(&rx->local->rx_skb_queue.lock); <---
--
Daniel J Blueman


Attachments:
2.6.38-rc1-iwlagn.txt (31.50 kB)

2011-01-19 09:51:27

by Johannes Berg

[permalink] [raw]
Subject: Re: [2.6.38-rc1] iwlagn lock misuse...

On Wed, 2011-01-19 at 16:44 +0700, Daniel J Blueman wrote:
> Booting an instrumented 2.6.38-rc1 kernel with an Intel WiFi Link 5300
> card and associating with an access point, I see a lockdep warning
> [attached].
>
> This is essentially (struct iwl_priv)->lock being taken with
> interrupts disabled in iwl-agn-ict.c:152 [1] and the same lock taken
> with interrupts enabled in rx.c:2476 [2] (confirmed via disassembly).
>
> It feels like this would have been introduced in this commit:
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=6e8cc38d5b05bb812f89a35bd9bf52405e67d0df

I think you're running into a lockdep false positive, it's not actually
the same lock and lockdep confuses a few skb queue locks. Please apply
this patch
http://git.kernel.org/?p=linux/kernel/git/linville/wireless-testing.git;a=commitdiff;h=53c16b8e752e8e58f4313f1155f3afadf78311bb
and see if the problem persists.

johannes


2011-01-19 10:11:15

by Daniel J Blueman

[permalink] [raw]
Subject: Re: [2.6.38-rc1] iwlagn lock misuse...

Hi Johannes,

On 19 January 2011 16:51, Johannes Berg <[email protected]> wrote:
> On Wed, 2011-01-19 at 16:44 +0700, Daniel J Blueman wrote:
>> Booting an instrumented 2.6.38-rc1 kernel with an Intel WiFi Link 5300
>> card and associating with an access point, I see a lockdep warning
>> [attached].
>>
>> This is essentially (struct iwl_priv)->lock being taken with
>> interrupts disabled in iwl-agn-ict.c:152 [1] and the same lock taken
>> with interrupts enabled in rx.c:2476 [2] (confirmed via disassembly).
>>
>> It feels like this would have been introduced in this commit:
>> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=6e8cc38d5b05bb812f89a35bd9bf52405e67d0df
>
> I think you're running into a lockdep false positive, it's not actually
> the same lock and lockdep confuses a few skb queue locks. Please apply
> this patch
> http://git.kernel.org/?p=linux/kernel/git/linville/wireless-testing.git;a=commitdiff;h=53c16b8e752e8e58f4313f1155f3afadf78311bb
> and see if the problem persists.

Good move; it addresses the false-positive. I hope it can hit 2.6.38-rc2.

Thanks,
Daniel
--
Daniel J Blueman