On Tue, Jun 21, 2011 at 07:40:15AM -0700, Johannes Berg wrote: > On Tue, 2011-06-21 at 19:40 +0530, Yogesh Ashok Powar wrote: > > > @@ -455,6 +496,8 @@ int ieee80211_key_link(struct ieee80211_key *key, > > __ieee80211_key_replace(sdata, sta, pairwise, old_key, key); > > __ieee80211_key_destroy(old_key); > > > > + increment_tailroom_need_count(key->local); > > + > > This doesn't seem right -- it links the key in first and then does the > update, the mechanism I described relies on doing it the other way > around. In that case we should have something like this @@ -493,11 +493,11 @@ int ieee80211_key_link(struct ieee80211_key *key, else old_key = key_mtx_dereference(sdata->local, sdata->keys[idx]); + increment_tailroom_need_count(key->local); + __ieee80211_key_replace(sdata, sta, pairwise, old_key, key); __ieee80211_key_destroy(old_key); - increment_tailroom_need_count(key->local); - ieee80211_debugfs_key_add(key); ret = ieee80211_key_enable_hw_accel(key); > > > @@ -498,8 +541,12 @@ void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata) > > > > mutex_lock(&sdata->local->key_mtx); > > > > - list_for_each_entry(key, &sdata->key_list, list) > > + sdata->local->crypto_tx_tailroom_needed_cnt = 0; > > + > > That doesn't seem right either -- only if you have a single sdata that > will work, I think? Right. For multiple sdata count will be over written to 0. I think, following should fix this Thanks Yogesh diff --git a/net/mac80211/key.c b/net/mac80211/key.c index edf9f40..0bf450d 100644 --- a/net/mac80211/key.c +++ b/net/mac80211/key.c @@ -541,8 +541,6 @@ void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata) mutex_lock(&sdata->local->key_mtx); - sdata->local->crypto_tx_tailroom_needed_cnt = 0; - list_for_each_entry(key, &sdata->key_list, list) { increment_tailroom_need_count(sdata->local); ieee80211_key_enable_hw_accel(key); diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 05e3fb8..bef3bdd 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c @@ -1271,6 +1271,9 @@ int ieee80211_reconfig(struct ieee80211_local *local) mutex_unlock(&local->sta_mtx); } + /* Reset tailroom skip count */ + local->crypto_tx_tailroom_needed_cnt = 0; + /* add back keys */ list_for_each_entry(sdata, &local->interfaces, list) if (ieee80211_sdata_running(sdata)) -- 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