We never clearly defined the semantics of the sta_notify callback and it was originally posted for iwlwifi which still doesn't use it at all. With the recent HT rework ath9k started relying on it, but I made a mistake there in that I made ath9k assume the HT information has already been filled in at sta_notify time. This isn't a hard thing to do, so do it. Signed-off-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> --- John, this fixes a regression from "mac80211: rewrite HT handling". net/mac80211/mlme.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) --- everything.orig/net/mac80211/mlme.c 2008-10-22 11:02:03.000000000 +0200 +++ everything/net/mac80211/mlme.c 2008-10-22 11:06:46.000000000 +0200 @@ -1195,7 +1195,7 @@ static void ieee80211_rx_mgmt_assoc_resp u32 changed = 0; int i, j; DECLARE_MAC_BUF(mac); - bool have_higher_than_11mbit = false; + bool have_higher_than_11mbit = false, newsta = false; /* AssocResp and ReassocResp have identical structure, so process both * of them in this function. */ @@ -1258,7 +1258,8 @@ static void ieee80211_rx_mgmt_assoc_resp sta = sta_info_get(local, ifsta->bssid); if (!sta) { struct ieee80211_bss *bss; - int err; + + newsta = true; sta = sta_info_alloc(sdata, ifsta->bssid, GFP_ATOMIC); if (!sta) { @@ -1277,13 +1278,6 @@ static void ieee80211_rx_mgmt_assoc_resp ieee80211_rx_bss_put(local, bss); } - err = sta_info_insert(sta); - if (err) { - printk(KERN_DEBUG "%s: failed to insert STA entry for" - " the AP (error %d)\n", sdata->dev->name, err); - rcu_read_unlock(); - return; - } /* update new sta with its last rx activity */ sta->last_rx = jiffies; } @@ -1353,13 +1347,24 @@ static void ieee80211_rx_mgmt_assoc_resp rate_control_rate_init(sta); - if (elems.wmm_param) { + if (elems.wmm_param) set_sta_flags(sta, WLAN_STA_WME); - rcu_read_unlock(); + + if (newsta) { + int err = sta_info_insert(sta); + if (err) { + printk(KERN_DEBUG "%s: failed to insert STA entry for" + " the AP (error %d)\n", sdata->dev->name, err); + rcu_read_unlock(); + return; + } + } + + rcu_read_unlock(); + + if (elems.wmm_param) ieee80211_sta_wmm_params(local, ifsta, elems.wmm_param, elems.wmm_param_len); - } else - rcu_read_unlock(); /* set AID and assoc capability, * ieee80211_set_associated() will tell the driver */ -- 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