summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2011-11-23 05:00:25 +0000
committeradrian <adrian@FreeBSD.org>2011-11-23 05:00:25 +0000
commitdaf0131aaf944af331f9a635ec31cd9c5bee06e6 (patch)
tree7fa7488bfdf628ad742732ebf9aa18719d562336 /sys/dev
parent428ebfa96cbd3cfcc89cca529bca9c4e21b10b0b (diff)
downloadFreeBSD-src-daf0131aaf944af331f9a635ec31cd9c5bee06e6.zip
FreeBSD-src-daf0131aaf944af331f9a635ec31cd9c5bee06e6.tar.gz
Flesh out the TX aggregation completion statistics.
* Failall is now named just that. * Add TX ok and TX fail, for aggregate frame sub-frames. This will break athstats; a followup commit wil resolve this. Sponsored by: Hobnob, Inc.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ath/if_ath_sysctl.c10
-rw-r--r--sys/dev/ath/if_ath_tx.c5
-rw-r--r--sys/dev/ath/if_athioctl.h6
3 files changed, 16 insertions, 5 deletions
diff --git a/sys/dev/ath/if_ath_sysctl.c b/sys/dev/ath/if_ath_sysctl.c
index 5323504..a609341 100644
--- a/sys/dev/ath/if_ath_sysctl.c
+++ b/sys/dev/ath/if_ath_sysctl.c
@@ -842,9 +842,15 @@ ath_sysctl_stats_attach(struct ath_softc *sc)
&sc->sc_stats.ast_tx_data_underrun, 0, "");
SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_delim_underrun", CTLFLAG_RD,
&sc->sc_stats.ast_tx_delim_underrun, 0, "");
- SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_aggrfail", CTLFLAG_RD,
- &sc->sc_stats.ast_tx_aggrfail, 0,
+ SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_aggr_failall", CTLFLAG_RD,
+ &sc->sc_stats.ast_tx_aggr_failall, 0,
"Number of aggregate TX failures (whole frame)");
+ SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_aggr_ok", CTLFLAG_RD,
+ &sc->sc_stats.ast_tx_aggr_ok, 0,
+ "Number of aggregate TX OK completions (subframe)");
+ SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_aggr_fail", CTLFLAG_RD,
+ &sc->sc_stats.ast_tx_aggr_fail, 0,
+ "Number of aggregate TX failures (subframe)");
SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_intr", CTLFLAG_RD,
&sc->sc_stats.ast_rx_intr, 0, "RX interrupts");
diff --git a/sys/dev/ath/if_ath_tx.c b/sys/dev/ath/if_ath_tx.c
index 5625bf2..ea48b93 100644
--- a/sys/dev/ath/if_ath_tx.c
+++ b/sys/dev/ath/if_ath_tx.c
@@ -2940,7 +2940,6 @@ ath_tx_comp_aggr_error(struct ath_softc *sc, struct ath_buf *bf_first,
TAILQ_INIT(&bf_q);
TAILQ_INIT(&bf_cq);
- sc->sc_stats.ast_tx_aggrfail++;
/*
* Update rate control - all frames have failed.
@@ -2955,12 +2954,14 @@ ath_tx_comp_aggr_error(struct ath_softc *sc, struct ath_buf *bf_first,
ATH_TXQ_LOCK(sc->sc_ac2q[tid->ac]);
tap = ath_tx_get_tx_tid(an, tid->tid);
+ sc->sc_stats.ast_tx_aggr_failall++;
/* Retry all subframes */
bf = bf_first;
while (bf) {
bf_next = bf->bf_next;
bf->bf_next = NULL; /* Remove it from the aggr list */
+ sc->sc_stats.ast_tx_aggr_fail++;
if (ath_tx_retry_subframe(sc, bf, &bf_q)) {
drops++;
bf->bf_next = NULL;
@@ -3196,6 +3197,7 @@ ath_tx_aggr_comp_aggr(struct ath_softc *sc, struct ath_buf *bf_first, int fail)
ATH_BA_ISSET(ba, ba_index));
if (tx_ok && ATH_BA_ISSET(ba, ba_index)) {
+ sc->sc_stats.ast_tx_aggr_ok++;
ath_tx_update_baw(sc, an, atid, bf);
bf->bf_state.bfs_dobaw = 0;
if (! bf->bf_state.bfs_addedbaw)
@@ -3205,6 +3207,7 @@ ath_tx_aggr_comp_aggr(struct ath_softc *sc, struct ath_buf *bf_first, int fail)
bf->bf_next = NULL;
TAILQ_INSERT_TAIL(&bf_cq, bf, bf_list);
} else {
+ sc->sc_stats.ast_tx_aggr_fail++;
if (ath_tx_retry_subframe(sc, bf, &bf_q)) {
drops++;
bf->bf_next = NULL;
diff --git a/sys/dev/ath/if_athioctl.h b/sys/dev/ath/if_athioctl.h
index 680694f..9c1cc12 100644
--- a/sys/dev/ath/if_athioctl.h
+++ b/sys/dev/ath/if_athioctl.h
@@ -148,12 +148,14 @@ struct ath_stats {
u_int32_t ast_tx_swretrymax; /* software TX retry max limit reach */
u_int32_t ast_tx_data_underrun;
u_int32_t ast_tx_delim_underrun;
- u_int32_t ast_tx_aggrfail; /* aggregate TX failed in its entirety */
+ u_int32_t ast_tx_aggr_failall; /* aggregate TX failed in its entirety */
u_int32_t ast_tx_getnobuf;
u_int32_t ast_tx_getbusybuf;
u_int32_t ast_tx_intr;
u_int32_t ast_rx_intr;
- u_int32_t ast_pad[4];
+ u_int32_t ast_tx_aggr_ok; /* aggregate TX ok */
+ u_int32_t ast_tx_aggr_fail; /* aggregate TX failed */
+ u_int32_t ast_pad[2];
};
#define SIOCGATHSTATS _IOWR('i', 137, struct ifreq)
OpenPOWER on IntegriCloud