Module Name: src Committed By: msaitoh Date: Fri Dec 8 05:39:27 UTC 2023
Modified Files: src/sys/dev/pci/ixgbe: ix_txrx.c Log Message: ixgbe: micro-optimize ixgbe_txeof() Update txr->tx_avail and txr->txr_no_space outside the loop in ixgbe_txeof(). To generate a diff of this commit: cvs rdiff -u -r1.108 -r1.109 src/sys/dev/pci/ixgbe/ix_txrx.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/ixgbe/ix_txrx.c diff -u src/sys/dev/pci/ixgbe/ix_txrx.c:1.108 src/sys/dev/pci/ixgbe/ix_txrx.c:1.109 --- src/sys/dev/pci/ixgbe/ix_txrx.c:1.108 Thu Nov 16 05:39:08 2023 +++ src/sys/dev/pci/ixgbe/ix_txrx.c Fri Dec 8 05:39:27 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: ix_txrx.c,v 1.108 2023/11/16 05:39:08 msaitoh Exp $ */ +/* $NetBSD: ix_txrx.c,v 1.109 2023/12/08 05:39:27 msaitoh Exp $ */ /****************************************************************************** @@ -64,7 +64,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ix_txrx.c,v 1.108 2023/11/16 05:39:08 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ix_txrx.c,v 1.109 2023/12/08 05:39:27 msaitoh Exp $"); #include "opt_inet.h" #include "opt_inet6.h" @@ -1108,6 +1108,7 @@ ixgbe_txeof(struct tx_ring *txr) union ixgbe_adv_tx_desc *txd; u32 work, processed = 0; u32 limit = sc->tx_process_limit; + u16 avail; KASSERT(mutex_owned(&txr->tx_mtx)); @@ -1151,6 +1152,7 @@ ixgbe_txeof(struct tx_ring *txr) buf = &txr->tx_buffers[work]; txd = &txr->tx_base[work]; work -= txr->num_desc; /* The distance to ring end */ + avail = txr->tx_avail; ixgbe_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map, BUS_DMASYNC_POSTREAD); @@ -1172,8 +1174,7 @@ ixgbe_txeof(struct tx_ring *txr) buf->m_head = NULL; } buf->eop = NULL; - txr->txr_no_space = false; - ++txr->tx_avail; + ++avail; /* We clean the range if multi segment */ while (txd != eop) { @@ -1198,7 +1199,7 @@ ixgbe_txeof(struct tx_ring *txr) m_freem(buf->m_head); buf->m_head = NULL; } - ++txr->tx_avail; + ++avail; buf->eop = NULL; } @@ -1224,6 +1225,10 @@ ixgbe_txeof(struct tx_ring *txr) work += txr->num_desc; txr->next_to_clean = work; + if (processed) { + txr->tx_avail = avail; + txr->txr_no_space = false; + } /* * Queue Hang detection, we know there's