summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_superg.c
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2012-12-09 01:08:44 +0000
committeradrian <adrian@FreeBSD.org>2012-12-09 01:08:44 +0000
commit2961cca7115ab05fda3222d813523d134ac42adc (patch)
treeb7d46cb6f76cbd5d501674190a80825717b64e7e /sys/net80211/ieee80211_superg.c
parent02094caa2c2fce94821d84bde50b9373b47f97e7 (diff)
downloadFreeBSD-src-2961cca7115ab05fda3222d813523d134ac42adc.zip
FreeBSD-src-2961cca7115ab05fda3222d813523d134ac42adc.tar.gz
Don't panic if the stageq here is empty; just fall through with NULL
pointers and leave the stage queue flush routine to just do nothing (since both head and tail here will be NULL.) This should quieten the "stageq empty" panic where the stageq itself is empty, but it won't fix the second KASSERT() here "staging queue empty" as that's likely a different underlying problem. PR: kern/174283
Diffstat (limited to 'sys/net80211/ieee80211_superg.c')
-rw-r--r--sys/net80211/ieee80211_superg.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_superg.c b/sys/net80211/ieee80211_superg.c
index bb208a7..84b48da 100644
--- a/sys/net80211/ieee80211_superg.c
+++ b/sys/net80211/ieee80211_superg.c
@@ -547,6 +547,14 @@ ff_flush(struct mbuf *head, struct mbuf *last)
/*
* Age frames on the staging queue.
+ *
+ * This is called without the comlock held, but it does all its work
+ * behind the comlock. Because of this, it's possible that the
+ * staging queue will be serviced between the function which called
+ * it and now; thus simply checking that the queue has work in it
+ * may fail.
+ *
+ * See PR kern/174283 for more details.
*/
void
ieee80211_ff_age(struct ieee80211com *ic, struct ieee80211_stageq *sq,
@@ -557,7 +565,9 @@ ieee80211_ff_age(struct ieee80211com *ic, struct ieee80211_stageq *sq,
struct ieee80211_node *ni;
struct ieee80211_tx_ampdu *tap;
+#if 0
KASSERT(sq->head != NULL, ("stageq empty"));
+#endif
IEEE80211_LOCK(ic);
head = sq->head;
OpenPOWER on IntegriCloud