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);
-               }
        }
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to