Search Linux Wireless

Re: 2.6.29.3: iwlwifi WARNING

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux