summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_superg.h
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2012-12-09 19:20:28 +0000
committeradrian <adrian@FreeBSD.org>2012-12-09 19:20:28 +0000
commitd004c46035fec779a966e34d3480a59fd6ea06fd (patch)
tree98a74f306ede5fb24c6fafd3a679d8ff70c581a0 /sys/net80211/ieee80211_superg.h
parentc0f1ef5356bfc5e3317f5b2d3bcc64634c9d35df (diff)
downloadFreeBSD-src-d004c46035fec779a966e34d3480a59fd6ea06fd.zip
FreeBSD-src-d004c46035fec779a966e34d3480a59fd6ea06fd.tar.gz
Atheros SuperG bug fixes, as part of hunting down kern/174283.
The stageqdepth (global, over all staging queues) was being kept incorrectly. It was being incremented whenever things were added, but only decremented during a flush. During active fast frames activity it wasn't being decremented, resulting in it always having a non-zero value during normal fast-frames operation. It was only used when checking if the aging queue should be checked; we may as well just defer to each of those staging queue counters (which look correct, thankfully.) Whilst I'm here, add locking assertions in the staging queue add/remove functions. The current crash shows that the staging queue has one frame, but only has a tail pointer set (the head pointer being set to NULL.) I'd like to grab a few more crashes where these locking assertions are in place so I can narrow down the issue between "somehow locking is messed up and things are racy" and "the stage queue head/tail pointer manipulation logic is subtly wrong." Tested: * AR5416 STA, AR5413 AP; with FastFrames enabled in the AR5416 HAL. PR: kern/174283
Diffstat (limited to 'sys/net80211/ieee80211_superg.h')
-rw-r--r--sys/net80211/ieee80211_superg.h3
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/net80211/ieee80211_superg.h b/sys/net80211/ieee80211_superg.h
index 81d918e..4df1386 100644
--- a/sys/net80211/ieee80211_superg.h
+++ b/sys/net80211/ieee80211_superg.h
@@ -66,7 +66,6 @@ struct ieee80211_stageq {
struct ieee80211_superg {
/* fast-frames staging q */
struct ieee80211_stageq ff_stageq[WME_NUM_AC];
- int ff_stageqdepth; /* cumulative depth */
};
void ieee80211_superg_attach(struct ieee80211com *);
@@ -109,7 +108,7 @@ ieee80211_ff_age_all(struct ieee80211com *ic, int quanta)
{
struct ieee80211_superg *sg = ic->ic_superg;
- if (sg != NULL && sg->ff_stageqdepth) {
+ if (sg != NULL) {
if (sg->ff_stageq[WME_AC_VO].depth)
ieee80211_ff_age(ic, &sg->ff_stageq[WME_AC_VO], quanta);
if (sg->ff_stageq[WME_AC_VI].depth)
OpenPOWER on IntegriCloud