Date: Mon, 11 Nov 2013 09:08:23 +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: r257951 - head/sys/dev/iwn Message-ID: <201311110908.rAB98NH0069315@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Mon Nov 11 09:08:22 2013 New Revision: 257951 URL: http://svnweb.freebsd.org/changeset/base/257951 Log: If A-MPDU transmission fails entirely, then no BA is received from the NIC and pushed up to the driver. Unfortunately this means there's no rate control notification done. Thus, if the rate control code makes a decision that hits a crappy rate that can't succeed, the rate code would never lower the rate and packet loss would continue. So, fake some rate control notification in this case. Modified: head/sys/dev/iwn/if_iwn.c Modified: head/sys/dev/iwn/if_iwn.c ============================================================================== --- head/sys/dev/iwn/if_iwn.c Mon Nov 11 08:56:40 2013 (r257950) +++ head/sys/dev/iwn/if_iwn.c Mon Nov 11 09:08:22 2013 (r257951) @@ -2987,12 +2987,24 @@ iwn_ampdu_tx_done(struct iwn_softc *sc, DPRINTF(sc, IWN_DEBUG_TRACE, "->%s begin\n", __func__); -#ifdef NOT_YET if (nframes == 1) { - if ((*status & 0xff) != 1 && (*status & 0xff) != 2) + if ((*status & 0xff) != 1 && (*status & 0xff) != 2) { +#ifdef NOT_YET printf("ieee80211_send_bar()\n"); - } #endif + /* + * If we completely fail a transmit, make sure a + * notification is pushed up to the rate control + * layer. + */ + tap = sc->qid2tap[qid]; + tid = tap->txa_tid; + wn = (void *)tap->txa_ni; + ni = tap->txa_ni; + ieee80211_ratectl_tx_complete(ni->ni_vap, ni, + IEEE80211_RATECTL_TX_FAILURE, &nframes, NULL); + } + } bitmap = 0; start = idx;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311110908.rAB98NH0069315>