sdata->bss_conf.assoc = 1;
        ieee80211_bss_info_change_notify(sdata, changed);
 
+       netif_tx_start_all_queues(sdata->dev);
        netif_carrier_on(sdata->dev);
 
        ieee80211_sta_send_apinfo(sdata, ifsta);
        ifsta->assoc_scan_tries = 0;
        ifsta->assoc_tries = 0;
 
+       netif_tx_stop_all_queues(sdata->dev);
        netif_carrier_off(sdata->dev);
 
        ieee80211_sta_tear_down_BA_sessions(sdata, sta->addr);
        ifsta->direct_probe_tries = 0;
        ifsta->auth_tries = 0;
        ifsta->assoc_tries = 0;
+       netif_tx_stop_all_queues(sdata->dev);
        netif_carrier_off(sdata->dev);
 }
 
        rcu_read_lock();
        list_for_each_entry_rcu(sdata, &local->interfaces, list) {
                /* Tell AP we're back */
-               if (sdata->vif.type == IEEE80211_IF_TYPE_STA &&
-                   sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED)
-                       ieee80211_send_nullfunc(local, sdata, 0);
+               if (sdata->vif.type == IEEE80211_IF_TYPE_STA) {
+                       if (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED) {
+                               ieee80211_send_nullfunc(local, sdata, 0);
+                               netif_tx_wake_all_queues(sdata->dev);
+                       }
+               } else
+                       netif_tx_wake_all_queues(sdata->dev);
 
                ieee80211_restart_sta_timer(sdata);
-
-               netif_wake_queue(sdata->dev);
        }
        rcu_read_unlock();
 
 
        rcu_read_lock();
        list_for_each_entry_rcu(sdata, &local->interfaces, list) {
-               netif_stop_queue(sdata->dev);
-               if (sdata->vif.type == IEEE80211_IF_TYPE_STA &&
-                   (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED))
-                       ieee80211_send_nullfunc(local, sdata, 1);
+               if (sdata->vif.type == IEEE80211_IF_TYPE_STA) {
+                       if (sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED) {
+                               netif_tx_stop_all_queues(sdata->dev);
+                               ieee80211_send_nullfunc(local, sdata, 1);
+                       }
+               } else
+                       netif_tx_stop_all_queues(sdata->dev);
        }
        rcu_read_unlock();