kern/165895: commit references a PR

dfilter service dfilter at FreeBSD.ORG
Sat Mar 10 20:00:35 UTC 2012


The following reply was made to PR kern/165895; it has been noted by GNATS.

From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:  
Subject: Re: kern/165895: commit references a PR
Date: Sat, 10 Mar 2012 19:58:37 +0000 (UTC)

 Author: adrian
 Date: Sat Mar 10 19:58:23 2012
 New Revision: 232794
 URL: http://svn.freebsd.org/changeset/base/232794
 
 Log:
   Fix a panic introduced in a previous commit - non-beaconing modes (eg STA)
   don't setup the avp mcast queue.
   
   This is a bit annoying though - it turns out the mcast queue isn't
   initialised for STA mode but it's then touched to see whether anything
   is in it.  That should be fixed in a subsequent commit.
   
   Noticed by:	gperez at entel.upc.edu
   PR:		kern/165895
 
 Modified:
   head/sys/dev/ath/if_ath_tx.c
   head/sys/dev/ath/if_athvar.h
 
 Modified: head/sys/dev/ath/if_ath_tx.c
 ==============================================================================
 --- head/sys/dev/ath/if_ath_tx.c	Sat Mar 10 18:56:16 2012	(r232793)
 +++ head/sys/dev/ath/if_ath_tx.c	Sat Mar 10 19:58:23 2012	(r232794)
 @@ -1409,15 +1409,12 @@ ath_tx_start(struct ath_softc *sc, struc
  	 */
  	if (IEEE80211_IS_MULTICAST(wh->i_addr1)) {
  		ATH_TXQ_LOCK(sc->sc_cabq);
 -		ATH_TXQ_LOCK(&avp->av_mcastq);
  
 -		if ((sc->sc_cabq->axq_depth + avp->av_mcastq.axq_depth) >
 -		    sc->sc_txq_mcastq_maxdepth) {
 +		if (sc->sc_cabq->axq_depth > sc->sc_txq_mcastq_maxdepth) {
  			sc->sc_stats.ast_tx_mcastq_overflow++;
  			r = ENOBUFS;
  		}
  
 -		ATH_TXQ_UNLOCK(&avp->av_mcastq);
  		ATH_TXQ_UNLOCK(sc->sc_cabq);
  
  		if (r != 0) {
 @@ -1759,8 +1756,6 @@ ath_raw_xmit(struct ieee80211_node *ni, 
  	struct ath_softc *sc = ifp->if_softc;
  	struct ath_buf *bf;
  	struct ieee80211_frame *wh = mtod(m, struct ieee80211_frame *);
 -	struct ieee80211vap *vap = ni->ni_vap;
 -	struct ath_vap *avp = ATH_VAP(vap);
  	int error = 0;
  
  	ATH_PCU_LOCK(sc);
 @@ -1790,15 +1785,12 @@ ath_raw_xmit(struct ieee80211_node *ni, 
  	 */
  	if (IEEE80211_IS_MULTICAST(wh->i_addr1)) {
  		ATH_TXQ_LOCK(sc->sc_cabq);
 -		ATH_TXQ_LOCK(&avp->av_mcastq);
  
 -		if ((sc->sc_cabq->axq_depth + avp->av_mcastq.axq_depth) >
 -		    sc->sc_txq_mcastq_maxdepth) {
 +		if (sc->sc_cabq->axq_depth > sc->sc_txq_mcastq_maxdepth) {
  			sc->sc_stats.ast_tx_mcastq_overflow++;
  			error = ENOBUFS;
  		}
  
 -		ATH_TXQ_UNLOCK(&avp->av_mcastq);
  		ATH_TXQ_UNLOCK(sc->sc_cabq);
  
  		if (error != 0) {
 
 Modified: head/sys/dev/ath/if_athvar.h
 ==============================================================================
 --- head/sys/dev/ath/if_athvar.h	Sat Mar 10 18:56:16 2012	(r232793)
 +++ head/sys/dev/ath/if_athvar.h	Sat Mar 10 19:58:23 2012	(r232794)
 @@ -547,10 +547,7 @@ struct ath_softc {
  	 * + data_minfree is the maximum number of free buffers
  	 *   overall to successfully allow a data frame.
  	 *
 -	 * + mcastq_maxdepth is the maximum depth allowe dof the avp+cabq
 -	 *   queue.  The avp is included in each comparison just to be
 -	 *   a little overly conservative and this may end up being
 -	 *   unhelpful with multiple VAPs.
 +	 * + mcastq_maxdepth is the maximum depth allowed of the cabq.
  	 */
  	int			sc_txq_data_minfree;
  	int			sc_txq_mcastq_maxdepth;
 _______________________________________________
 svn-src-all at freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
 


More information about the freebsd-wireless mailing list