iwm: Avoid calling iwm_start() each time a descriptor is reclaimed.

Only perform the call when a qfull bit transitions.  While here, avoid
assignments in declarations in iwm_mvm_rx_tx_cmd().

MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Mark Johnston 2019-11-07 23:29:57 +00:00
parent 3cc50d22fd
commit b41c219912
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=354496

View File

@ -3337,14 +3337,21 @@ iwm_mvm_rx_tx_cmd_single(struct iwm_softc *sc, struct iwm_rx_packet *pkt,
static void
iwm_mvm_rx_tx_cmd(struct iwm_softc *sc, struct iwm_rx_packet *pkt)
{
struct iwm_cmd_header *cmd_hdr = &pkt->hdr;
int idx = cmd_hdr->idx;
int qid = cmd_hdr->qid;
struct iwm_tx_ring *ring = &sc->txq[qid];
struct iwm_tx_data *txd = &ring->data[idx];
struct iwm_node *in = txd->in;
struct mbuf *m = txd->m;
int status;
struct iwm_cmd_header *cmd_hdr;
struct iwm_tx_ring *ring;
struct iwm_tx_data *txd;
struct iwm_node *in;
struct mbuf *m;
int idx, qid, qmsk, status;
cmd_hdr = &pkt->hdr;
idx = cmd_hdr->idx;
qid = cmd_hdr->qid;
ring = &sc->txq[qid];
txd = &ring->data[idx];
in = txd->in;
m = txd->m;
KASSERT(txd->done == 0, ("txd not done"));
KASSERT(txd->in != NULL, ("txd without node"));
@ -3366,11 +3373,11 @@ iwm_mvm_rx_tx_cmd(struct iwm_softc *sc, struct iwm_rx_packet *pkt)
ieee80211_tx_complete(&in->in_ni, m, status);
if (--ring->queued < IWM_TX_RING_LOMARK) {
sc->qfullmsk &= ~(1 << ring->qid);
if (sc->qfullmsk == 0) {
qmsk = 1 << qid;
if (--ring->queued < IWM_TX_RING_LOMARK && (sc->qfullmsk & qmsk) != 0) {
sc->qfullmsk &= ~qmsk;
if (sc->qfullmsk == 0)
iwm_start(sc);
}
}
}