Date: Tue, 29 Mar 2011 15:59:07 +0000 (UTC) From: Adrian Chadd <adrian@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r220132 - head/sys/dev/ath Message-ID: <201103291559.p2TFx7Iv033266@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Tue Mar 29 15:59:07 2011 New Revision: 220132 URL: http://svn.freebsd.org/changeset/base/220132 Log: According to ath9k recv.c, one shouldn't be doing self-linked descriptors in the RX path when doing 11n and block-ack'ed frames. Apparently, the MAC will loop over that self-linked descriptor and treat it as "good enough" for (incorrectly!) ACKing the frames in the block-ack. Until I figure out how to work around this issue in the future, this counter will tell me if packet RX processing ever gets to the point where it's touching the self-linked descriptor. If there's ever enough packets to get to that point, BA's will be invalid and likely very unhappy. Modified: head/sys/dev/ath/if_ath.c head/sys/dev/ath/if_ath_sysctl.c head/sys/dev/ath/if_athioctl.h Modified: head/sys/dev/ath/if_ath.c ============================================================================== --- head/sys/dev/ath/if_ath.c Tue Mar 29 15:36:43 2011 (r220131) +++ head/sys/dev/ath/if_ath.c Tue Mar 29 15:59:07 2011 (r220132) @@ -3338,6 +3338,7 @@ ath_rx_proc(void *arg, int npending) ds = bf->bf_desc; if (ds->ds_link == bf->bf_daddr) { /* NB: never process the self-linked entry at the end */ + sc->sc_stats.ast_rx_hitqueueend++; break; } /* XXX sync descriptor memory */ Modified: head/sys/dev/ath/if_ath_sysctl.c ============================================================================== --- head/sys/dev/ath/if_ath_sysctl.c Tue Mar 29 15:36:43 2011 (r220131) +++ head/sys/dev/ath/if_ath_sysctl.c Tue Mar 29 15:59:07 2011 (r220132) @@ -703,6 +703,8 @@ ath_sysctl_stats_attach(struct ath_softc &sc->sc_stats.ast_rx_hi_rx_chain, 0, ""); SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_htprotect", CTLFLAG_RD, &sc->sc_stats.ast_tx_htprotect, 0, "HT tx frames with protection"); + SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_hitqueueend", CTLFLAG_RD, + &sc->sc_stats.ast_rx_hitqueueend, 0, "RX hit queue end"); /* Attach the RX phy error array */ ath_sysctl_stats_attach_rxphyerr(sc, child); Modified: head/sys/dev/ath/if_athioctl.h ============================================================================== --- head/sys/dev/ath/if_athioctl.h Tue Mar 29 15:36:43 2011 (r220131) +++ head/sys/dev/ath/if_athioctl.h Tue Mar 29 15:59:07 2011 (r220132) @@ -128,7 +128,8 @@ struct ath_stats { u_int32_t ast_rx_decrypt_busy_err; u_int32_t ast_rx_hi_rx_chain; u_int32_t ast_tx_htprotect; /* HT tx frames with protection */ - u_int32_t ast_pad[3]; + u_int32_t ast_rx_hitqueueend; + u_int32_t ast_pad[2]; }; #define SIOCGATHSTATS _IOWR('i', 137, struct ifreq)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103291559.p2TFx7Iv033266>