*     of assocaited station or AP.
  *
  * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
- *     bursting) for a hardware TX queue. Must be atomic.
+ *     bursting) for a hardware TX queue.
  *
  * @get_tx_stats: Get statistics of the current TX queue status. This is used
  *     to get number of currently queued packets (queue length), maximum queue
 
            memcmp(ifsta->bssid, mgmt->bssid, ETH_ALEN) != 0)
                return;
 
-       ieee80211_sta_wmm_params(local, ifsta, elems.wmm_param,
-                                elems.wmm_param_len);
-
        /* Do not send changes to driver if we are scanning. This removes
-        * requirement that driver's bss_info_changed function needs to be
-        * atomic. */
+        * requirement that a driver's bss_info_changed/conf_tx functions
+        * need to be atomic.
+        * This is really ugly code, we should rewrite scanning and make
+        * all this more understandable for humans.
+        */
        if (local->sta_sw_scanning || local->sta_hw_scanning)
                return;
 
+       ieee80211_sta_wmm_params(local, ifsta, elems.wmm_param,
+                                elems.wmm_param_len);
+
        if (elems.erp_info && elems.erp_info_len >= 1)
                changed |= ieee80211_handle_erp_ie(sdata, elems.erp_info[0]);
        else {