aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-03-02 18:07:02 +0000
committerFelix Fietkau <nbd@openwrt.org>2013-03-02 18:07:02 +0000
commit23f460abb6b5a05f9ccb2223db23eab46abd1a68 (patch)
tree4e9b1177a5a99485c52184bd9fd339d49c22f9b0
parent89be702bff233011883291f3301b4642286fb409 (diff)
downloadupstream-23f460abb6b5a05f9ccb2223db23eab46abd1a68.tar.gz
upstream-23f460abb6b5a05f9ccb2223db23eab46abd1a68.tar.bz2
upstream-23f460abb6b5a05f9ccb2223db23eab46abd1a68.zip
mac80211: another fix for monitor mode handling (fixes #13071)
SVN-Revision: 35846
-rw-r--r--package/mac80211/patches/300-pending_work.patch26
1 files changed, 23 insertions, 3 deletions
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index 508a674c5a..2d46059c35 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -175,7 +175,17 @@
u32 changed = 0;
int res;
u32 hw_reconf_flags = 0;
-@@ -595,30 +594,8 @@ int ieee80211_do_open(struct wireless_de
+@@ -541,6 +540,9 @@ int ieee80211_do_open(struct wireless_de
+
+ ieee80211_adjust_monitor_flags(sdata, 1);
+ ieee80211_configure_filter(local);
++ mutex_lock(&local->mtx);
++ ieee80211_recalc_idle(local);
++ mutex_unlock(&local->mtx);
+
+ netif_carrier_on(dev);
+ break;
+@@ -595,30 +597,8 @@ int ieee80211_do_open(struct wireless_de
set_bit(SDATA_STATE_RUNNING, &sdata->state);
@@ -207,7 +217,17 @@
/*
* set_multicast_list will be invoked by the networking core
-@@ -1022,6 +999,72 @@ static void ieee80211_if_setup(struct ne
+@@ -817,6 +797,9 @@ static void ieee80211_do_stop(struct iee
+
+ ieee80211_adjust_monitor_flags(sdata, -1);
+ ieee80211_configure_filter(local);
++ mutex_lock(&local->mtx);
++ ieee80211_recalc_idle(local);
++ mutex_unlock(&local->mtx);
+ break;
+ case NL80211_IFTYPE_P2P_DEVICE:
+ /* relies on synchronize_rcu() below */
+@@ -1022,6 +1005,72 @@ static void ieee80211_if_setup(struct ne
dev->destructor = free_netdev;
}
@@ -280,7 +300,7 @@
static void ieee80211_iface_work(struct work_struct *work)
{
struct ieee80211_sub_if_data *sdata =
-@@ -1126,6 +1169,9 @@ static void ieee80211_iface_work(struct
+@@ -1126,6 +1175,9 @@ static void ieee80211_iface_work(struct
break;
ieee80211_mesh_rx_queued_mgmt(sdata, skb);
break;