Hi Reinette, reinette chatre schrieb: > Hi Arnd, > > On Thu, 2009-05-14 at 23:39 -0700, Arnd Hannemann wrote: >> Hi, >> >> I'm using ubuntu jaunty with 2.6.29.3 mainline build: >> http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.29.3/ >> >> And from time to time get this: >> >> [98439.060208] ------------[ cut here ]------------ >> [98439.060217] WARNING: at >> /home/kernel-ppa/mainline/build/drivers/net/wireless/iwlwifi/iwl-sta.c:728 >> iwl_set_tkip_dynamic_key_info+0xc0/0xd0 [iwlcore]() >> [98439.060224] Hardware name: 20552PG >> [98439.060228] no space for new kewModules linked in: nls_iso8859_1 >> nls_cp437 vfat fat usb_storage binfmt_misc i915 drm i2c_algo_bit ppdev >> bnep ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 >> xt_state nf_conntrack ipt_ >> REJECT xt_tcpudp iptable_filter ip_tables x_tables bridge stp kvm_intel >> kvm sbp2 lp parport snd_hda_codec_conexant joydev snd_hda_intel >> snd_hda_codec snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy >> snd_seq_oss snd_seq_midi snd_rawmidi sn >> d_seq_midi_event arc4 ecb snd_seq snd_timer snd_seq_device iwlagn >> iwlcore snd mac80211 soundcore thinkpad_acpi pcmcia sdhci_pci sdhci >> psmouse iTCO_wdt video intel_agp agpgart snd_page_alloc pcspkr nvram >> yenta_socket rsrc_nonstatic pcmcia >> _core ricoh_mmc led_class iTCO_vendor_support serio_raw btusb output >> cfg80211 sha256_generic aes_i586 aes_generic cbc ohci1394 ieee1394 >> e1000e dm_crypt >> [98439.060372] Pid: 10, comm: events/0 Not tainted >> 2.6.29-02062903-generic #02062903 >> [98439.060377] Call Trace: >> [98439.060394] [<c013a636>] warn_slowpath+0x86/0xa0 >> [98439.060409] [<c04f7938>] ? _spin_lock+0x8/0x10 >> [98439.060418] [<c01e967c>] ? inotify_d_instantiate+0x3c/0x50 >> [98439.060427] [<c028879c>] ? security_d_instantiate+0x1c/0x20 >> [98439.060436] [<c01cebf8>] ? d_instantiate+0x38/0x40 >> [98439.060444] [<c01cf3c7>] ? dput+0x67/0xd0 >> [98439.060453] [<c01220f8>] ? default_spin_lock_flags+0x8/0x10 >> [98439.060460] [<c04f78e2>] ? _spin_lock_irqsave+0x32/0x50 >> [98439.060489] [<f80ea900>] iwl_set_tkip_dynamic_key_info+0xc0/0xd0 >> [iwlcore] >> [98439.060523] [<f80eac5f>] iwl_set_dynamic_key+0x5f/0x80 [iwlcore] >> [98439.060546] [<f81a5793>] iwl_mac_set_key+0xf3/0x120 [iwlagn] >> [98439.060565] [<f81a56a0>] ? iwl_mac_set_key+0x0/0x120 [iwlagn] >> [98439.060606] [<f8097fd3>] ieee80211_key_enable_hw_accel+0x53/0xc0 >> [mac80211] >> [98439.060622] [<c027a9fc>] ? debugfs_remove+0x4c/0x60 >> [98439.060665] [<f8098168>] __ieee80211_key_todo+0xe8/0x130 [mac80211] >> [98439.060674] [<c04f6044>] ? schedule+0x2f4/0x570 >> [98439.060681] [<c04f69eb>] ? mutex_lock+0xb/0x20 >> [98439.060727] [<f80982cd>] ieee80211_key_todo+0xd/0x20 [mac80211] >> [98439.060767] [<f8098368>] key_todo+0x8/0x10 [mac80211] >> [98439.060775] [<c014b344>] run_workqueue+0xd4/0x170 >> [98439.060815] [<f8098360>] ? key_todo+0x0/0x10 [mac80211] >> [98439.060824] [<c014bd28>] worker_thread+0x88/0xe0 >> [98439.060832] [<c014ede0>] ? autoremove_wake_function+0x0/0x40 >> [98439.060840] [<c014bca0>] ? worker_thread+0x0/0xe0 >> [98439.060846] [<c014ea72>] kthread+0x42/0x70 >> [98439.060852] [<c014ea30>] ? kthread+0x0/0x70 >> [98439.060860] [<c0103da7>] kernel_thread_helper+0x7/0x10 >> [98439.060865] ---[ end trace 3b8aa73681896774 ]--- >> [102020.364126] iwlagn: Removing wrong key 1 0x410b >> [102020.364274] ------------[ cut here ]------------ >> >> and then this very same message spams my dmesg. >> Computer is a Lenovo T500 with Core2Duo. >> > > > Could you please try this patch? It can be found in 2.6.30 and applies > with some fuzz to 2.6.29. If it works for you then we can look into > backporting it to 2.6.29. I'm running on 2.6.30-rc6 for one day now, which I believe contains the mentioned patch and I could not trigger the warning yet. Not sure if this is enough evidence that the mentioned patch solved my issue ;-) However, something probably did. Best regards, Arnd > >>From 299f5462087f3bc2141e6bc83ba7e2b15d8a07d2 Mon Sep 17 00:00:00 2001 > From: Reinette Chatre <reinette.chatre@xxxxxxxxx> > Date: Thu, 30 Apr 2009 13:56:31 -0700 > Subject: [PATCH] iwlwifi: update key flags at time key is set > > We need to be symmetrical in what is done when key is set and cleared. > This is important wrt the key flags as they are used during key > clearing and if they are not set when the key is set the key cannot be > cleared completely. > > This addresses the many occurences of the WARN found in > iwl_set_tkip_dynamic_key_info() and tracked in > http://www.kerneloops.org/searchweek.php?search=iwl_set_dynamic_key > > If calling iwl_set_tkip_dynamic_key_info()/iwl_remove_dynamic_key() > pair a few times in a row will cause that we run out of key space. > This is because the index stored in the key flags is used by > iwl_remove_dynamic_key() to decide if it should remove the key. > Unfortunately the key flags, and hence the key index is currently only > set at the time the key is written to the device (in > iwl_update_tkip_key()) and _not_ in iwl_set_tkip_dynamic_key_info(). > Fix this by setting flags in iwl_set_tkip_dynamic_key_info(). > > Signed-off-by: Reinette Chatre <reinette.chatre@xxxxxxxxx> > Signed-off-by: John W. Linville <linville@xxxxxxxxxxxxx> > --- > drivers/net/wireless/iwlwifi/iwl-sta.c | 21 +++++++++++---------- > 1 files changed, 11 insertions(+), 10 deletions(-) > > diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c > index 5798fe4..44ab03a 100644 > --- a/drivers/net/wireless/iwlwifi/iwl-sta.c > +++ b/drivers/net/wireless/iwlwifi/iwl-sta.c > @@ -719,6 +719,14 @@ static int iwl_set_tkip_dynamic_key_info(struct iwl_priv *priv, > { > unsigned long flags; > int ret = 0; > + __le16 key_flags = 0; > + > + key_flags |= (STA_KEY_FLG_TKIP | STA_KEY_FLG_MAP_KEY_MSK); > + key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS); > + key_flags &= ~STA_KEY_FLG_INVALID; > + > + if (sta_id == priv->hw_params.bcast_sta_id) > + key_flags |= STA_KEY_MULTICAST_MSK; > > keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; > keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC; > @@ -738,6 +746,9 @@ static int iwl_set_tkip_dynamic_key_info(struct iwl_priv *priv, > WARN(priv->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET, > "no space for a new key"); > > + priv->stations[sta_id].sta.key.key_flags = key_flags; > + > + > /* This copy is acutally not needed: we get the key with each TX */ > memcpy(priv->stations[sta_id].keyinfo.key, keyconf->key, 16); > > @@ -754,9 +765,7 @@ void iwl_update_tkip_key(struct iwl_priv *priv, > { > u8 sta_id = IWL_INVALID_STATION; > unsigned long flags; > - __le16 key_flags = 0; > int i; > - DECLARE_MAC_BUF(mac); > > sta_id = iwl_find_station(priv, addr); > if (sta_id == IWL_INVALID_STATION) { > @@ -771,16 +780,8 @@ void iwl_update_tkip_key(struct iwl_priv *priv, > return; > } > > - key_flags |= (STA_KEY_FLG_TKIP | STA_KEY_FLG_MAP_KEY_MSK); > - key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS); > - key_flags &= ~STA_KEY_FLG_INVALID; > - > - if (sta_id == priv->hw_params.bcast_sta_id) > - key_flags |= STA_KEY_MULTICAST_MSK; > - > spin_lock_irqsave(&priv->sta_lock, flags); > > - priv->stations[sta_id].sta.key.key_flags = key_flags; > priv->stations[sta_id].sta.key.tkip_rx_tsc_byte2 = (u8) iv32; > > for (i = 0; i < 5; i++) -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html