Date: Fri, 9 Mar 2012 22:58:35 +0000 (UTC) From: Adrian Chadd <adrian@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r232753 - head/sys/dev/ath Message-ID: <201203092258.q29MwZBX028902@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Fri Mar 9 22:58:34 2012 New Revision: 232753 URL: http://svn.freebsd.org/changeset/base/232753 Log: Document that we may end up with some suboptimal handling of data frames with stations in power saving mode. I'm not (yet) sure how to handle TX'ing aggregates frames to stations that are in power saving mode, or whether that's even a feasible thing to do. So in order to (mostly) not forget, leave a couple of comments in the code. The code presently assumes that the aggregation TID state for an ath_node is locked not by the ath_node lock or a node+TID lock, but behind the hardware queue said TID maps to. This assumption is going to be incorrect for stations in power saving mode as we'll be TX'ing frames on the multicast queue. In any case, I'm afraid its a "later problem". :/ Modified: head/sys/dev/ath/if_ath_tx.c Modified: head/sys/dev/ath/if_ath_tx.c ============================================================================== --- head/sys/dev/ath/if_ath_tx.c Fri Mar 9 22:41:09 2012 (r232752) +++ head/sys/dev/ath/if_ath_tx.c Fri Mar 9 22:58:34 2012 (r232753) @@ -1162,6 +1162,11 @@ ath_tx_normal_setup(struct ath_softc *sc * (or) if there is some mcast data waiting on the mcast * queue (to prevent out of order delivery) multicast * frames must be buffered until after the beacon. + * + * XXX This likely means that if there's a station in power + * save mode, we won't be doing any kind of aggregation towards + * anyone. This is likely a very suboptimal way of dealing + * with things. */ if (ismcast && (vap->iv_ps_sta || avp->av_mcastq.axq_depth)) txq = &avp->av_mcastq; @@ -1409,6 +1414,12 @@ ath_tx_start(struct ath_softc *sc, struc if (ismcast) txq = &avp->av_mcastq; + /* + * XXX This likely means that if there's a station in power + * save mode, we won't be doing any kind of aggregation towards + * anyone. This is likely a very suboptimal way of dealing + * with things. + */ if ((! is_ampdu) && (vap->iv_ps_sta || avp->av_mcastq.axq_depth)) txq = &avp->av_mcastq;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203092258.q29MwZBX028902>