On Sunday 02 July 2006 13:32, Johann Uhrmann wrote: > here is another log from the 2.6.17-mm4 kernel. This oops was the only > one since reboot: > > bcm43xx: ASSERTION FAILED (radio_attenuation < 10) at: > drivers/net/wireless/bcm43xx/bcm43xx_phy.c:1490:bc)[ 87.484118] bcm43xx: > ASSERTION FAILED (radio_attenuation < 10) at: > drivers/net/wireless/bcm43xx/bcm43xx_phy.c:1490:bcm43xx_find_lopair() > [ 87.559086] bcm43xx: ASSERTION FAILED (radio_attenuation < 10) at: > drivers/net/wireless/bcm43xx/bcm43xx_phy.c:1490:bcm43xx_find_lopair() > [ 87.641350] bcm43xx: ASSERTION FAILED (radio_attenuation < 10) at: > drivers/net/wireless/bcm43xx/bcm43xx_phy.c:1490:bcm43xx_find_lopair() > [ ok ] > * Configuring network interfaces... [ 88.126654] BUG: spinlock > recursion on CPU#0, sh/9441 > [ 88.161695] lock: ffff81003acd93f0, .magic: dead4ead, .owner: sh/9441, > .owner_cpu: 0 > [ 88.208502] > [ 88.208503] Call Trace: > [ 88.232081] [<ffffffff8026fbde>] show_trace+0xae/0x280 > [ 88.263329] [<ffffffff8026fff5>] dump_stack+0x15/0x20 > [ 88.294085] [<ffffffff80213db4>] spin_bug+0xb4/0xd0 > [ 88.324030] [<ffffffff80207651>] _raw_spin_lock+0x51/0x180 > [ 88.357591] [<ffffffff8026bd99>] _spin_lock_irqsave+0x39/0x50 > [ 88.392575] [<ffffffff885a86a5>] > :bcm43xx:bcm43xx_ieee80211_hard_start_xmit+0x35/0xc0 > [ 88.439931] [<ffffffff80439d1b>] ieee80211_tx_frame+0x23b/0x2b0 > [ 88.476307] [<ffffffff80441764>] > ieee80211softmac_send_mgt_frame+0x3f4/0x420 > [ 88.519427] [<ffffffff8044204f>] ieee80211softmac_auth_resp+0x30f/0x4c0 > [ 88.559954] [<ffffffff8043e3b9>] ieee80211_rx_mgt+0x759/0x830 > [ 88.595291] [<ffffffff885c00e5>] :bcm43xx:bcm43xx_rx+0x7f5/0x870 > [ 88.631757] [<ffffffff885c3601>] :bcm43xx:bcm43xx_dma_rx+0x581/0x680 > [ 88.670306] [<ffffffff885aba35>] > :bcm43xx:bcm43xx_interrupt_tasklet+0x765/0xa80 > [ 88.714562] [<ffffffff80290e33>] tasklet_action+0x73/0xd0 > [ 88.747394] [<ffffffff802127c7>] __do_softirq+0x67/0xe0 > [ 88.779187] [<ffffffff80266c36>] call_softirq+0x1e/0x28
The following patch is supposed to fix this. I did only compile-test it. Please runtime-test it. Thanks. -- Softmac Shared Key Auth: Fix recursive call into the driver by doing schedule_work. recursive calls may result in a driver lock recursion. Signed-off-by: Michael Buesch <[EMAIL PROTECTED]> Index: wireless-2.6/net/ieee80211/softmac/ieee80211softmac_auth.c =================================================================== --- wireless-2.6.orig/net/ieee80211/softmac/ieee80211softmac_auth.c 2006-07-02 19:37:26.000000000 +0200 +++ wireless-2.6/net/ieee80211/softmac/ieee80211softmac_auth.c 2006-07-02 20:19:12.000000000 +0200 @@ -116,6 +116,16 @@ kfree(auth); } +/* Sends an auth challenge. */ +static void +ieee80211softmac_auth_challenge(void *_aq) +{ + struct ieee80211softmac_auth_queue_item *aq = _aq; + + /* Send our response */ + ieee80211softmac_send_mgt_frame(aq->mac, aq->net, IEEE80211_STYPE_AUTH, aq->state); +} + /* Handle the auth response from the AP * This should be registered with ieee80211 as handle_auth */ @@ -197,24 +207,25 @@ case IEEE80211SOFTMAC_AUTH_SHARED_CHALLENGE: /* Check to make sure we have a challenge IE */ data = (u8 *)auth->info_element; - if(*data++ != MFIE_TYPE_CHALLENGE){ + if (*data++ != MFIE_TYPE_CHALLENGE) { printkl(KERN_NOTICE PFX "Shared Key Authentication failed due to a missing challenge.\n"); break; } /* Save the challenge */ spin_lock_irqsave(&mac->lock, flags); net->challenge_len = *data++; - if(net->challenge_len > WLAN_AUTH_CHALLENGE_LEN) + if (net->challenge_len > WLAN_AUTH_CHALLENGE_LEN) net->challenge_len = WLAN_AUTH_CHALLENGE_LEN; - if(net->challenge != NULL) + if (net->challenge != NULL) kfree(net->challenge); net->challenge = kmalloc(net->challenge_len, GFP_ATOMIC); memcpy(net->challenge, data, net->challenge_len); aq->state = IEEE80211SOFTMAC_AUTH_SHARED_RESPONSE; - spin_unlock_irqrestore(&mac->lock, flags); - /* Send our response */ - ieee80211softmac_send_mgt_frame(mac, aq->net, IEEE80211_STYPE_AUTH, aq->state); + cancel_delayed_work(&aq->work); + INIT_WORK(&aq->work, &ieee80211softmac_auth_challenge, (void *)aq); + schedule_work(&aq->work); + spin_unlock_irqrestore(&mac->lock, flags); return 0; case IEEE80211SOFTMAC_AUTH_SHARED_PASS: kfree(net->challenge); -- Greetings Michael. - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html