Author: adrian
Date: Wed Feb 20 11:14:55 2013
New Revision: 247025
URL: http://svnweb.freebsd.org/changeset/base/247025

Log:
  CFG_ERR, DATA_UNDERRUN and DELIM_UNDERRUN are all flags, rather than
  part of ts_status. Thus:
  
  * make sure we decode them from ts_flags, rather than ts_status;
  * make sure we decode them regardless of whether there's an error or not.
  
  This correctly exposes descriptor configuration errors, TX delimiter
  underruns and TX data underruns.

Modified:
  head/sys/dev/ath/if_ath.c

Modified: head/sys/dev/ath/if_ath.c
==============================================================================
--- head/sys/dev/ath/if_ath.c   Wed Feb 20 10:58:42 2013        (r247024)
+++ head/sys/dev/ath/if_ath.c   Wed Feb 20 11:14:55 2013        (r247025)
@@ -3581,17 +3581,24 @@ ath_tx_update_stats(struct ath_softc *sc
                if (ts->ts_status & HAL_TXERR_TIMER_EXPIRED)
                        sc->sc_stats.ast_tx_timerexpired++;
 
-               if (ts->ts_status & HAL_TX_DATA_UNDERRUN)
-                       sc->sc_stats.ast_tx_data_underrun++;
-               if (ts->ts_status & HAL_TX_DELIM_UNDERRUN)
-                       sc->sc_stats.ast_tx_delim_underrun++;
-
                if (bf->bf_m->m_flags & M_FF)
                        sc->sc_stats.ast_ff_txerr++;
        }
        /* XXX when is this valid? */
-       if (ts->ts_status & HAL_TX_DESC_CFG_ERR)
+       if (ts->ts_flags & HAL_TX_DESC_CFG_ERR)
                sc->sc_stats.ast_tx_desccfgerr++;
+       /*
+        * This can be valid for successful frame transmission!
+        * If there's a TX FIFO underrun during aggregate transmission,
+        * the MAC will pad the rest of the aggregate with delimiters.
+        * If a BA is returned, the frame is marked as "OK" and it's up
+        * to the TX completion code to notice which frames weren't
+        * successfully transmitted.
+        */
+       if (ts->ts_flags & HAL_TX_DATA_UNDERRUN)
+               sc->sc_stats.ast_tx_data_underrun++;
+       if (ts->ts_flags & HAL_TX_DELIM_UNDERRUN)
+               sc->sc_stats.ast_tx_delim_underrun++;
 
        sr = ts->ts_shortretry;
        lr = ts->ts_longretry;
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to