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
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 -0500quoted
============================================= [ 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()).