|
@@ -330,7 +330,7 @@ static void ieee80211_set_default_queues(struct ieee80211_sub_if_data *sdata)
|
|
|
sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE;
|
|
|
}
|
|
|
|
|
|
-static int ieee80211_add_virtual_monitor(struct ieee80211_local *local)
|
|
|
+int ieee80211_add_virtual_monitor(struct ieee80211_local *local)
|
|
|
{
|
|
|
struct ieee80211_sub_if_data *sdata;
|
|
|
int ret;
|
|
@@ -371,7 +371,7 @@ static int ieee80211_add_virtual_monitor(struct ieee80211_local *local)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void ieee80211_del_virtual_monitor(struct ieee80211_local *local)
|
|
|
+void ieee80211_del_virtual_monitor(struct ieee80211_local *local)
|
|
|
{
|
|
|
struct ieee80211_sub_if_data *sdata;
|
|
|
|
|
@@ -487,12 +487,6 @@ static int ieee80211_do_open(struct net_device *dev, bool coming_up)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if (local->monitors == 0 && local->open_count == 0) {
|
|
|
- res = ieee80211_add_virtual_monitor(local);
|
|
|
- if (res)
|
|
|
- goto err_stop;
|
|
|
- }
|
|
|
-
|
|
|
/* must be before the call to ieee80211_configure_filter */
|
|
|
local->monitors++;
|
|
|
if (local->monitors == 1) {
|
|
@@ -507,8 +501,6 @@ static int ieee80211_do_open(struct net_device *dev, bool coming_up)
|
|
|
break;
|
|
|
default:
|
|
|
if (coming_up) {
|
|
|
- ieee80211_del_virtual_monitor(local);
|
|
|
-
|
|
|
res = drv_add_interface(local, sdata);
|
|
|
if (res)
|
|
|
goto err_stop;
|
|
@@ -743,7 +735,6 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
|
|
|
if (local->monitors == 0) {
|
|
|
local->hw.conf.flags &= ~IEEE80211_CONF_MONITOR;
|
|
|
hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR;
|
|
|
- ieee80211_del_virtual_monitor(local);
|
|
|
}
|
|
|
|
|
|
ieee80211_adjust_monitor_flags(sdata, -1);
|
|
@@ -817,9 +808,6 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
|
|
|
}
|
|
|
}
|
|
|
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
|
|
|
-
|
|
|
- if (local->monitors == local->open_count && local->monitors > 0)
|
|
|
- ieee80211_add_virtual_monitor(local);
|
|
|
}
|
|
|
|
|
|
static int ieee80211_stop(struct net_device *dev)
|