svn commit: r336611 - head/sys/net
Marius Strobl
marius at FreeBSD.org
Sun Jul 22 17:45:46 UTC 2018
Author: marius
Date: Sun Jul 22 17:45:44 2018
New Revision: 336611
URL: https://svnweb.freebsd.org/changeset/base/336611
Log:
- Given that the controlling expression of the receive loop in iflib_rxeof()
tests for avail > 0, avail can never be 0 within that loop. Thus, move
decrementing avail and budget_left into the loop and before the code which
checks for additional descriptors having become available in case all the
previous ones have been processed but there still is budget left so the
latter code works as expected. [1]
- In iflib_{busdma_load_mbuf_sg,parse_header}(), remove dead stores to m
and n respectively. [2, 3]
- In collapse_pkthdr(), ensure that m_next isn't NULL before dereferencing
it. [4]
- Remove a duplicate assignment of segs in iflib_encap().
Reported by: Coverity
CID: 1356027 [1], 1356047 [2], 1368205 [3], 1356028 [4]
Modified:
head/sys/net/iflib.c
Modified: head/sys/net/iflib.c
==============================================================================
--- head/sys/net/iflib.c Sun Jul 22 17:40:13 2018 (r336610)
+++ head/sys/net/iflib.c Sun Jul 22 17:45:44 2018 (r336611)
@@ -2663,7 +2663,7 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget)
return (false);
}
- for (budget_left = budget; (budget_left > 0) && (avail > 0); budget_left--, avail--) {
+ for (budget_left = budget; budget_left > 0 && avail > 0;) {
if (__predict_false(!CTX_ACTIVE(ctx))) {
DBG_COUNTER_INC(rx_ctx_inactive);
break;
@@ -2697,6 +2697,8 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget)
/* will advance the cidx on the corresponding free lists */
m = iflib_rxd_pkt_get(rxq, &ri);
+ avail--;
+ budget_left--;
if (avail == 0 && budget_left)
avail = iflib_rxd_avail(ctx, rxq, *cidxp, budget_left);
@@ -2873,14 +2875,14 @@ iflib_parse_header(iflib_txq_t txq, if_pkt_info_t pi,
struct ether_vlan_header *eh;
struct mbuf *m, *n;
- n = m = *mp;
+ m = *mp;
if ((sctx->isc_flags & IFLIB_NEED_SCRATCH) &&
M_WRITABLE(m) == 0) {
if ((m = m_dup(m, M_NOWAIT)) == NULL) {
return (ENOMEM);
} else {
m_freem(*mp);
- n = *mp = m;
+ *mp = m;
}
}
@@ -3048,6 +3050,8 @@ collapse_pkthdr(struct mbuf *m0)
}
m = m0;
m->m_next = m_next;
+ if (m_next == NULL)
+ return (m);
if ((m_next->m_flags & M_EXT) == 0) {
m = m_defrag(m, M_NOWAIT);
} else {
@@ -3108,7 +3112,7 @@ iflib_busdma_load_mbuf_sg(iflib_txq_t txq, bus_dma_tag
* Please don't ever do this
*/
if (__predict_false(m->m_len == 0))
- *m0 = m = collapse_pkthdr(m);
+ *m0 = collapse_pkthdr(m);
ctx = txq->ift_ctx;
sctx = ctx->ifc_sctx;
@@ -3285,7 +3289,6 @@ iflib_encap(iflib_txq_t txq, struct mbuf **m_headp)
int err, nsegs, ndesc, max_segs, pidx, cidx, next, ntxd;
bus_dma_tag_t desc_tag;
- segs = txq->ift_segs;
ctx = txq->ift_ctx;
sctx = ctx->ifc_sctx;
scctx = &ctx->ifc_softc_ctx;
More information about the svn-src-all
mailing list