svn commit: r354496 - head/sys/dev/iwm
Mark Johnston
markj at FreeBSD.org
Thu Nov 7 23:29:58 UTC 2019
Author: markj
Date: Thu Nov 7 23:29:57 2019
New Revision: 354496
URL: https://svnweb.freebsd.org/changeset/base/354496
Log:
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
Modified:
head/sys/dev/iwm/if_iwm.c
Modified: head/sys/dev/iwm/if_iwm.c
==============================================================================
--- head/sys/dev/iwm/if_iwm.c Thu Nov 7 23:29:43 2019 (r354495)
+++ head/sys/dev/iwm/if_iwm.c Thu Nov 7 23:29:57 2019 (r354496)
@@ -3337,15 +3337,22 @@ iwm_mvm_rx_tx_cmd_single(struct iwm_softc *sc, struct
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"));
KASSERT(txd->m != NULL, ("txd without mbuf"));
@@ -3366,11 +3373,11 @@ iwm_mvm_rx_tx_cmd(struct iwm_softc *sc, struct iwm_rx_
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);
- }
}
}
More information about the svn-src-all
mailing list