kfree_rcu(old_probe_resp, rcu_head);
 
        list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
-               sta_info_flush(local, vlan);
-       sta_info_flush(local, sdata);
+               sta_info_flush(vlan);
+       sta_info_flush(sdata);
        ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED);
 
        drv_stop_ap(sdata->local, sdata);
 static int ieee80211_del_station(struct wiphy *wiphy, struct net_device *dev,
                                 u8 *mac)
 {
-       struct ieee80211_local *local = wiphy_priv(wiphy);
        struct ieee80211_sub_if_data *sdata;
 
        sdata = IEEE80211_DEV_TO_SUB_IF(dev);
        if (mac)
                return sta_info_destroy_addr_bss(sdata, mac);
 
-       sta_info_flush(local, sdata);
+       sta_info_flush(sdata);
        return 0;
 }
 
 
        skb_reserve(skb, sdata->local->hw.extra_tx_headroom);
 
        if (!ether_addr_equal(ifibss->bssid, bssid))
-               sta_info_flush(sdata->local, sdata);
+               sta_info_flush(sdata);
 
        /* if merging, indicate to driver that we leave the old IBSS */
        if (sdata->vif.bss_conf.ibss_joined) {
        memset(ifibss->bssid, 0, ETH_ALEN);
        ifibss->ssid_len = 0;
 
-       sta_info_flush(sdata->local, sdata);
+       sta_info_flush(sdata);
 
        spin_lock_bh(&ifibss->incomplete_lock);
        while (!list_empty(&ifibss->incomplete_stations)) {
 
         * all other modes we've already removed all stations when
         * disconnecting etc.
         */
-       sta_info_flush(local, sdata);
+       sta_info_flush(sdata);
 
        /*
         * Don't count this interface for promisc/allmulti while it
  */
 static void ieee80211_teardown_sdata(struct ieee80211_sub_if_data *sdata)
 {
-       struct ieee80211_local *local = sdata->local;
        int flushed;
        int i;
 
        if (ieee80211_vif_is_mesh(&sdata->vif))
                mesh_rmc_free(sdata);
 
-       flushed = sta_info_flush(local, sdata);
+       flushed = sta_info_flush(sdata);
        WARN_ON(flushed);
 }
 
 
        ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED);
 
        /* flush STAs and mpaths on this iface */
-       sta_info_flush(sdata->local, sdata);
+       sta_info_flush(sdata);
        mesh_path_flush_by_iface(sdata);
 
        del_timer_sync(&sdata->u.mesh.housekeeping_timer);
 
        memset(ifmgd->bssid, 0, ETH_ALEN);
 
        /* remove AP and TDLS peers */
-       sta_info_flush(local, sdata);
+       sta_info_flush(sdata);
 
        /* finally reset all BSS / config parameters */
        changed |= ieee80211_reset_erp_info(sdata);
 
 void sta_info_stop(struct ieee80211_local *local)
 {
        del_timer_sync(&local->sta_cleanup);
-       sta_info_flush(local, NULL);
 }
 
 /**
  *
  * Returns the number of removed STA entries.
  *
- * @local: local interface data
- * @sdata: matching rule for the net device (sta->dev) or %NULL to match all STAs
+ * @sdata: sdata to remove all stations from
  */
-int sta_info_flush(struct ieee80211_local *local,
-                  struct ieee80211_sub_if_data *sdata)
+int sta_info_flush(struct ieee80211_sub_if_data *sdata)
 {
+       struct ieee80211_local *local = sdata->local;
        struct sta_info *sta, *tmp;
        int ret = 0;
 
 
        mutex_lock(&local->sta_mtx);
        list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
-               if (!sdata || sdata == sta->sdata) {
+               if (sdata == sta->sdata) {
                        WARN_ON(__sta_info_destroy(sta));
                        ret++;
                }
 
        rcu_barrier();
 
-       if (sdata) {
-               ieee80211_cleanup_sdata_stas(sdata);
-               cancel_work_sync(&sdata->cleanup_stations_wk);
-       } else {
-               mutex_lock(&local->iflist_mtx);
-               list_for_each_entry(sdata, &local->interfaces, list) {
-                       ieee80211_cleanup_sdata_stas(sdata);
-                       cancel_work_sync(&sdata->cleanup_stations_wk);
-               }
-               mutex_unlock(&local->iflist_mtx);
-       }
+       ieee80211_cleanup_sdata_stas(sdata);
+       cancel_work_sync(&sdata->cleanup_stations_wk);
 
        return ret;
 }
 
 
 void sta_info_init(struct ieee80211_local *local);
 void sta_info_stop(struct ieee80211_local *local);
-int sta_info_flush(struct ieee80211_local *local,
-                  struct ieee80211_sub_if_data *sdata);
+int sta_info_flush(struct ieee80211_sub_if_data *sdata);
 void sta_set_rate_info_tx(struct sta_info *sta,
                          const struct ieee80211_tx_rate *rate,
                          struct rate_info *rinfo);