From owner-svn-src-user@FreeBSD.ORG Sun Aug 21 02:35:11 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 DDE01106564A; Sun, 21 Aug 2011 02:35:10 +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 C40FC8FC0A; Sun, 21 Aug 2011 02:35:10 +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 p7L2ZA2R078702; Sun, 21 Aug 2011 02:35:10 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p7L2ZAH4078698; Sun, 21 Aug 2011 02:35:10 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201108210235.p7L2ZAH4078698@svn.freebsd.org> From: Adrian Chadd Date: Sun, 21 Aug 2011 02:35:10 +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: r225052 - 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: Sun, 21 Aug 2011 02:35:11 -0000 Author: adrian Date: Sun Aug 21 02:35:10 2011 New Revision: 225052 URL: http://svn.freebsd.org/changeset/base/225052 Log: Add some very basic TX aggregation statistics via a sysctl. Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_sysctl.c user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c user/adrian/if_ath_tx/sys/dev/ath/if_athioctl.h Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_sysctl.c ============================================================================== --- user/adrian/if_ath_tx/sys/dev/ath/if_ath_sysctl.c Sun Aug 21 00:51:42 2011 (r225051) +++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_sysctl.c Sun Aug 21 02:35:10 2011 (r225052) @@ -299,6 +299,35 @@ ath_sysctl_rfkill(SYSCTL_HANDLER_ARGS) } static int +ath_sysctl_txagg(SYSCTL_HANDLER_ARGS) +{ + struct ath_softc *sc = arg1; + int i, param = 0; + int error; + + error = sysctl_handle_int(oidp, ¶m, 0, req); + if (error || !req->newptr) + return error; + + if (param != 1) + return 0; + + printf("aggr single packet: %d\n", + sc->sc_stats.tx_aggr.aggr_single_pkt); + printf("aggr non-baw packet: %d\n", + sc->sc_stats.tx_aggr.aggr_nonbaw_pkt); + printf("aggr aggregate packet: %d\n", + sc->sc_stats.tx_aggr.aggr_aggr_pkt); + for (i = 0; i < 64; i++) { + printf("%2d: %10d ", i, sc->sc_stats.tx_aggr.aggr_pkts[i]); + if (i % 4 == 3) + printf("\n"); + } + printf("\n"); + return 0; +} + +static int ath_sysctl_rfsilent(SYSCTL_HANDLER_ARGS) { struct ath_softc *sc = arg1; @@ -465,6 +494,11 @@ ath_sysctlattach(struct ath_softc *sc) "rfkill", CTLTYPE_INT | CTLFLAG_RW, sc, 0, ath_sysctl_rfkill, "I", "enable/disable RF kill switch"); } + + SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, + "txagg", CTLTYPE_INT | CTLFLAG_RW, sc, 0, + ath_sysctl_txagg, "I", ""); + if (ath_hal_hasintmit(ah)) { SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "intmit", CTLTYPE_INT | CTLFLAG_RW, sc, 0, 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 Sun Aug 21 00:51:42 2011 (r225051) +++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c Sun Aug 21 02:35:10 2011 (r225052) @@ -2876,6 +2876,8 @@ ath_tx_tid_hw_queue_aggr(struct ath_soft ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc); ath_tx_set_ratectrl(sc, ni, bf); + sc->sc_stats.tx_aggr.aggr_nonbaw_pkt++; + /* Queue the packet; continue */ goto queuepkt; } @@ -2915,12 +2917,14 @@ ath_tx_tid_hw_queue_aggr(struct ath_soft ath_tx_chaindesclist(sc, bf); ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc); ath_tx_set_ratectrl(sc, ni, bf); + sc->sc_stats.tx_aggr.aggr_single_pkt++; } else { DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR, "%s: multi-frame aggregate: %d frames, length %d\n", __func__, bf->bf_state.bfs_nframes, bf->bf_state.bfs_al); bf->bf_state.bfs_aggr = 1; + sc->sc_stats.tx_aggr.aggr_pkts[bf->bf_state.bfs_nframes]++; /* Set rate 1, 2, 3 to 0 for aggregate frames */ bf->bf_state.bfs_rc[1].rix = Modified: user/adrian/if_ath_tx/sys/dev/ath/if_athioctl.h ============================================================================== --- user/adrian/if_ath_tx/sys/dev/ath/if_athioctl.h Sun Aug 21 00:51:42 2011 (r225051) +++ user/adrian/if_ath_tx/sys/dev/ath/if_athioctl.h Sun Aug 21 02:35:10 2011 (r225052) @@ -35,6 +35,13 @@ #ifndef _DEV_ATH_ATHIOCTL_H #define _DEV_ATH_ATHIOCTL_H +struct ath_tx_aggr_stats { + u_int32_t aggr_pkts[64]; + u_int32_t aggr_single_pkt; + u_int32_t aggr_nonbaw_pkt; + u_int32_t aggr_aggr_pkt; +}; + struct ath_stats { u_int32_t ast_watchdog; /* device reset by watchdog */ u_int32_t ast_hardware; /* fatal hardware error interrupts */ @@ -138,6 +145,7 @@ 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; + struct ath_tx_aggr_stats tx_aggr; u_int32_t ast_pad[9]; };