Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F170249682
D3998.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D3998.diff
View Options
Index: head/sys/net80211/ieee80211.c
===================================================================
--- head/sys/net80211/ieee80211.c
+++ head/sys/net80211/ieee80211.c
@@ -356,6 +356,8 @@
LIST_REMOVE(ic, ic_next);
mtx_unlock(&ic_list_mtx);
+ taskqueue_drain(taskqueue_thread, &ic->ic_restart_task);
+
/*
* The VAP is responsible for setting and clearing
* the VIMAGE context.
Index: head/sys/net80211/ieee80211_proto.h
===================================================================
--- head/sys/net80211/ieee80211_proto.h
+++ head/sys/net80211/ieee80211_proto.h
@@ -307,6 +307,7 @@
void ieee80211_stop_all(struct ieee80211com *);
void ieee80211_suspend_all(struct ieee80211com *);
void ieee80211_resume_all(struct ieee80211com *);
+void ieee80211_restart_all(struct ieee80211com *);
void ieee80211_dturbo_switch(struct ieee80211vap *, int newflags);
void ieee80211_swbmiss(void *arg);
void ieee80211_beacon_miss(struct ieee80211com *);
Index: head/sys/net80211/ieee80211_proto.c
===================================================================
--- head/sys/net80211/ieee80211_proto.c
+++ head/sys/net80211/ieee80211_proto.c
@@ -108,6 +108,7 @@
static void update_channel(void *, int);
static void update_chw(void *, int);
static void update_wme(void *, int);
+static void restart_vaps(void *, int);
static void ieee80211_newstate_cb(void *, int);
static int
@@ -146,6 +147,7 @@
TASK_INIT(&ic->ic_bmiss_task, 0, beacon_miss, ic);
TASK_INIT(&ic->ic_chw_task, 0, update_chw, ic);
TASK_INIT(&ic->ic_wme_task, 0, update_wme, ic);
+ TASK_INIT(&ic->ic_restart_task, 0, restart_vaps, ic);
ic->ic_wme.wme_hipri_switch_hysteresis =
AGGRESSIVE_MODE_SWITCH_HYSTERESIS;
@@ -1212,6 +1214,15 @@
ic->ic_wme.wme_update(ic);
}
+static void
+restart_vaps(void *arg, int npending)
+{
+ struct ieee80211com *ic = arg;
+
+ ieee80211_suspend_all(ic);
+ ieee80211_resume_all(ic);
+}
+
/*
* Block until the parent is in a known state. This is
* used after any operations that dispatch a task (e.g.
@@ -1486,6 +1497,19 @@
IEEE80211_UNLOCK(ic);
}
+/*
+ * Restart all vap's running on a device.
+ */
+void
+ieee80211_restart_all(struct ieee80211com *ic)
+{
+ /*
+ * NB: do not use ieee80211_runtask here, we will
+ * block & drain net80211 taskqueue.
+ */
+ taskqueue_enqueue(taskqueue_thread, &ic->ic_restart_task);
+}
+
void
ieee80211_beacon_miss(struct ieee80211com *ic)
{
Index: head/sys/net80211/ieee80211_var.h
===================================================================
--- head/sys/net80211/ieee80211_var.h
+++ head/sys/net80211/ieee80211_var.h
@@ -134,6 +134,7 @@
struct task ic_bmiss_task; /* deferred beacon miss hndlr */
struct task ic_chw_task; /* deferred HT CHW update */
struct task ic_wme_task; /* deferred WME update */
+ struct task ic_restart_task; /* deferred device restart */
counter_u64_t ic_ierrors; /* input errors */
counter_u64_t ic_oerrors; /* output errors */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Sep 5, 12:58 AM (10 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38191551
Default Alt Text
D3998.diff (2 KB)
Attached To
Mode
D3998: net80211: add ieee80211_restart_all() call
Attached
Detach File
Event Timeline
Log In to Comment