|
@@ -656,11 +656,15 @@ int ieee80211_key_link(struct ieee80211_key *key,
|
|
|
{
|
|
|
struct ieee80211_local *local = sdata->local;
|
|
|
struct ieee80211_key *old_key;
|
|
|
- int idx, ret;
|
|
|
- bool pairwise;
|
|
|
-
|
|
|
- pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
|
|
|
- idx = key->conf.keyidx;
|
|
|
+ int idx = key->conf.keyidx;
|
|
|
+ bool pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE;
|
|
|
+ /*
|
|
|
+ * We want to delay tailroom updates only for station - in that
|
|
|
+ * case it helps roaming speed, but in other cases it hurts and
|
|
|
+ * can cause warnings to appear.
|
|
|
+ */
|
|
|
+ bool delay_tailroom = sdata->vif.type == NL80211_IFTYPE_STATION;
|
|
|
+ int ret;
|
|
|
|
|
|
mutex_lock(&sdata->local->key_mtx);
|
|
|
|
|
@@ -688,14 +692,14 @@ int ieee80211_key_link(struct ieee80211_key *key,
|
|
|
increment_tailroom_need_count(sdata);
|
|
|
|
|
|
ieee80211_key_replace(sdata, sta, pairwise, old_key, key);
|
|
|
- ieee80211_key_destroy(old_key, true);
|
|
|
+ ieee80211_key_destroy(old_key, delay_tailroom);
|
|
|
|
|
|
ieee80211_debugfs_key_add(key);
|
|
|
|
|
|
if (!local->wowlan) {
|
|
|
ret = ieee80211_key_enable_hw_accel(key);
|
|
|
if (ret)
|
|
|
- ieee80211_key_free(key, true);
|
|
|
+ ieee80211_key_free(key, delay_tailroom);
|
|
|
} else {
|
|
|
ret = 0;
|
|
|
}
|
|
@@ -930,7 +934,8 @@ void ieee80211_free_sta_keys(struct ieee80211_local *local,
|
|
|
ieee80211_key_replace(key->sdata, key->sta,
|
|
|
key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
|
|
|
key, NULL);
|
|
|
- __ieee80211_key_destroy(key, true);
|
|
|
+ __ieee80211_key_destroy(key, key->sdata->vif.type ==
|
|
|
+ NL80211_IFTYPE_STATION);
|
|
|
}
|
|
|
|
|
|
for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
|
|
@@ -940,7 +945,8 @@ void ieee80211_free_sta_keys(struct ieee80211_local *local,
|
|
|
ieee80211_key_replace(key->sdata, key->sta,
|
|
|
key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE,
|
|
|
key, NULL);
|
|
|
- __ieee80211_key_destroy(key, true);
|
|
|
+ __ieee80211_key_destroy(key, key->sdata->vif.type ==
|
|
|
+ NL80211_IFTYPE_STATION);
|
|
|
}
|
|
|
|
|
|
mutex_unlock(&local->key_mtx);
|