Date: Mon, 20 Jun 2016 02:04:40 +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: r302024 - head/sys/dev/ath Message-ID: <201606200204.u5K24eph077100@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Mon Jun 20 02:04:40 2016 New Revision: 302024 URL: https://svnweb.freebsd.org/changeset/base/302024 Log: [ath] fix EDMA TX buffer flags for use when retransmitting frames. This started showing up when doing lots of aggregate traffic. For TDMA it's always no-ACK traffic and I didn't notice this, and I didn't notice it when doing 11abg traffic as it didn't fail enough in a bad way to trigger this. This showed up as the fifo depth being < 0. Eg: Jun 19 09:23:07 gertrude kernel: ath0: ath_tx_edma_push_staging_list: queued 2 packets; depth=2, fifo depth=1 Jun 19 09:23:07 gertrude kernel: ath0: ath_edma_tx_processq: Q1, bf=0xfffffe000385f068, start=1, end=1 Jun 19 09:23:07 gertrude kernel: ath0: ath_edma_tx_processq: Q1: FIFO depth is now 0 (1) Jun 19 09:23:07 gertrude kernel: ath0: ath_edma_tx_processq: Q1, bf=0xfffffe0003866fe8, start=0, end=1 Jun 19 09:23:07 gertrude kernel: ath0: ath_edma_tx_processq: Q1: FIFO depth is now -1 (0) So, clear the flags before adding them to a TX queue, so if they're re-added for the retransmit path it'll clear whatever they were and not double-account the FIFOEND flag. Oops. Tested: * AR9380, STA mode, 11n iperf testing (~130mbit) Approved by: re (delphij) Modified: head/sys/dev/ath/if_ath_tx_edma.c Modified: head/sys/dev/ath/if_ath_tx_edma.c ============================================================================== --- head/sys/dev/ath/if_ath_tx_edma.c Sun Jun 19 23:36:40 2016 (r302023) +++ head/sys/dev/ath/if_ath_tx_edma.c Mon Jun 20 02:04:40 2016 (r302024) @@ -192,6 +192,9 @@ ath_tx_edma_push_staging_list(struct ath /* Queue it into our staging list */ TAILQ_INSERT_TAIL(&sq, bf, bf_list); + + /* Ensure the flags are cleared */ + bf->bf_flags &= ~(ATH_BUF_FIFOPTR | ATH_BUF_FIFOEND); sqdepth++; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201606200204.u5K24eph077100>