Date: Thu, 7 Nov 2019 23:29:58 +0000 (UTC) From: Mark Johnston <markj@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r354496 - head/sys/dev/iwm Message-ID: <201911072329.xA7NTw4f067901@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); - } } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201911072329.xA7NTw4f067901>