Thread (182 messages) 182 messages, 27 authors, 2008-08-01

Re: Kernel WARNING: at net/core/dev.c:1330 __netif_schedule+0x2c/0x98()

From: Jarek Poplawski <hidden>
Date: 2008-07-23 06:15:44
Also in: linux-wireless, lkml

On 23-07-2008 01:04, David Miller wrote:
From: Larry Finger <redacted>
Date: Tue, 22 Jul 2008 13:39:08 -0500
quoted
=============================================
[ INFO: possible recursive locking detected ]
2.6.26-Linus-05752-g93ded9b-dirty #53
---------------------------------------------
b43/1997 is trying to acquire lock:
  (_xmit_IEEE80211#2){-...}, at: [<ffffffffa028f322>] 
ieee80211_scan_completed+0x130/0x2e1 [mac80211]

but task is already holding lock:
  (_xmit_IEEE80211#2){-...}, at: [<ffffffffa028f322>] 
ieee80211_scan_completed+0x130/0x2e1 [mac80211]
...
Lockdep doesn't like that we have an array of objects (the TX queues)
and we're iterating over them grabbing all of their locks.

Does anyone know how to teach lockdep that this is OK?
I guess, David Miller knows...:

http://permalink.gmane.org/gmane.linux.network/99784

Jarek P.

PS: if there is nothing new in lockdep the classical method would
be to change this static array:

static struct lock_class_key
netdev_xmit_lock_key[ARRAY_SIZE(netdev_lock_type)];

to

static struct lock_class_key
netdev_xmit_lock_key[ARRAY_SIZE(netdev_lock_type)][MAX_NUM_TX_QUEUES];

and set lockdep classes per queue as well. (If we are sure we don't
need lockdep subclasses anywhere this could be optimized by using
one lock_class_key per 8 queues and spin_lock_nested()).
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help