From owner-svn-src-user@FreeBSD.ORG Fri Aug 26 08:47:00 2011 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5B6D9106566C; Fri, 26 Aug 2011 08:47:00 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 324F98FC0A; Fri, 26 Aug 2011 08:47:00 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p7Q8l05h044417; Fri, 26 Aug 2011 08:47:00 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p7Q8l0P9044415; Fri, 26 Aug 2011 08:47:00 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201108260847.p7Q8l0P9044415@svn.freebsd.org> From: Adrian Chadd Date: Fri, 26 Aug 2011 08:47:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r225187 - user/adrian/if_ath_tx/sys/dev/ath X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Aug 2011 08:47:00 -0000 Author: adrian Date: Fri Aug 26 08:46:59 2011 New Revision: 225187 URL: http://svn.freebsd.org/changeset/base/225187 Log: Various fixes to some of the issues I've seen with the hostap operation. * Fix the mcast queue assignment * When completing aggregate frames, bf_first no longer exists, so don't assume you can use it for anything. Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c ============================================================================== --- user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Fri Aug 26 07:38:40 2011 (r225186) +++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Fri Aug 26 08:46:59 2011 (r225187) @@ -1289,7 +1289,7 @@ ath_tx_start(struct ath_softc *sc, struc * destination hardware queue. Don't bother software * queuing it, as the TID will now be paused. */ - if (ismcast) { + if (txq == &avp->av_mcastq) { /* Setup the descriptor before handoff */ ath_tx_setds(sc, bf); ath_tx_set_ratectrl(sc, ni, bf); @@ -1377,6 +1377,10 @@ ath_tx_raw_start(struct ath_softc *sc, s /* XXX honor IEEE80211_BPF_DATAPAD */ pktlen = m0->m_pkthdr.len - (hdrlen & 3) + IEEE80211_CRC_LEN; + + DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: ismcast=%d\n", + __func__, ismcast); + /* Handle encryption twiddling if needed */ if (! ath_tx_tag_crypto(sc, ni, m0, params->ibp_flags & IEEE80211_BPF_CRYPTO, 0, @@ -1542,6 +1546,8 @@ ath_tx_raw_start(struct ath_softc *sc, s * into the hardware queue, right after any pending * frames to that node are. */ + DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: dooverride=%d\n", + __func__, do_override); if (do_override) { ath_tx_setds(sc, bf); @@ -2734,7 +2740,7 @@ ath_tx_aggr_comp_aggr(struct ath_softc * int ba_index; int drops = 0; struct ath_txq *txq = sc->sc_ac2q[atid->ac]; - int nframes = 0, nbad = 0; + int nframes = 0, nbad = 0, nf; int pktlen; /* XXX there's too much on the stack? */ struct ath_rc_series rc[4]; @@ -2814,6 +2820,10 @@ ath_tx_aggr_comp_aggr(struct ath_softc * * sent and which weren't. */ bf = bf_first; + nf = bf_first->bf_state.bfs_nframes; + + /* bf_first is going to be invalid once this list is walked */ + bf_first = NULL; while (bf) { nframes++; @@ -2844,9 +2854,10 @@ ath_tx_aggr_comp_aggr(struct ath_softc * bf = bf_next; } - if (nframes != bf_first->bf_state.bfs_nframes) - device_printf(sc->sc_dev, "%s: np=%d; nframes=%d\n", - __func__, nframes, bf_first->bf_state.bfs_nframes); + if (nframes != nf) + device_printf(sc->sc_dev, + "%s: num frames seen=%d; bf nframes=%d\n", + __func__, nframes, nf); /* * Now we know how many frames were bad, call the rate