Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 09 Jan 2026 14:42:46 +0000
From:      Brooks Davis <brooks@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 31e7dc6b9a00 - main - iflib: remove convoluted custom zeroing code
Message-ID:  <696113e6.f233.5c1a099f@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/src/commit/?id=31e7dc6b9a000b02353bfc41cbd897533287cda2

commit 31e7dc6b9a000b02353bfc41cbd897533287cda2
Author:     Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2026-01-09 14:19:49 +0000
Commit:     Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2026-01-09 14:19:49 +0000

    iflib: remove convoluted custom zeroing code
    
    Replace a collection of aliasing violations and ifdefs with memset
    (which now expands to __builtin_memset and should be quite reliably
    inlined.)  The old code is hard to maintain as evidenced by the most
    recent change to if_pkt_info_t updating the defines, but not the zeroing
    code.
    
    Reviewed by:    gallatin, erj
    Effort:         CHERI upstreaming
    Sponsored by:   Innovate UK
    Fixes:          43d7ee540efe ("iflib: support for transmit side nic KTLS offload")
    Differential Revision:  https://reviews.freebsd.org/D54605
---
 sys/net/iflib.c | 65 +++++----------------------------------------------------
 1 file changed, 5 insertions(+), 60 deletions(-)

diff --git a/sys/net/iflib.c b/sys/net/iflib.c
index fcd847ab6f7a..5c37f199e84c 100644
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -504,61 +504,6 @@ typedef struct if_rxsd {
 	iflib_fl_t ifsd_fl;
 } *if_rxsd_t;
 
-/* multiple of word size */
-#ifdef __LP64__
-#define PKT_INFO_SIZE	7
-#define RXD_INFO_SIZE	5
-#define PKT_TYPE uint64_t
-#else
-#define PKT_INFO_SIZE	12
-#define RXD_INFO_SIZE	8
-#define PKT_TYPE uint32_t
-#endif
-#define PKT_LOOP_BOUND	((PKT_INFO_SIZE / 3) * 3)
-#define RXD_LOOP_BOUND	((RXD_INFO_SIZE / 4) * 4)
-
-typedef struct if_pkt_info_pad {
-	PKT_TYPE pkt_val[PKT_INFO_SIZE];
-} *if_pkt_info_pad_t;
-typedef struct if_rxd_info_pad {
-	PKT_TYPE rxd_val[RXD_INFO_SIZE];
-} *if_rxd_info_pad_t;
-
-CTASSERT(sizeof(struct if_pkt_info_pad) == sizeof(struct if_pkt_info));
-CTASSERT(sizeof(struct if_rxd_info_pad) == sizeof(struct if_rxd_info));
-
-static inline void
-pkt_info_zero(if_pkt_info_t pi)
-{
-	if_pkt_info_pad_t pi_pad;
-
-	pi_pad = (if_pkt_info_pad_t)pi;
-	pi_pad->pkt_val[0] = 0; pi_pad->pkt_val[1] = 0; pi_pad->pkt_val[2] = 0;
-	pi_pad->pkt_val[3] = 0; pi_pad->pkt_val[4] = 0; pi_pad->pkt_val[5] = 0;
-#ifndef __LP64__
-	pi_pad->pkt_val[6] = 0; pi_pad->pkt_val[7] = 0; pi_pad->pkt_val[8] = 0;
-	pi_pad->pkt_val[9] = 0; pi_pad->pkt_val[10] = 0;
-#endif
-}
-
-static inline void
-rxd_info_zero(if_rxd_info_t ri)
-{
-	if_rxd_info_pad_t ri_pad;
-	int i;
-
-	ri_pad = (if_rxd_info_pad_t)ri;
-	for (i = 0; i < RXD_LOOP_BOUND; i += 4) {
-		ri_pad->rxd_val[i] = 0;
-		ri_pad->rxd_val[i + 1] = 0;
-		ri_pad->rxd_val[i + 2] = 0;
-		ri_pad->rxd_val[i + 3] = 0;
-	}
-#ifdef __LP64__
-	ri_pad->rxd_val[RXD_INFO_SIZE - 1] = 0;
-#endif
-}
-
 /*
  * Only allow a single packet to take up most 1/nth of the tx ring
  */
@@ -1068,7 +1013,7 @@ iflib_netmap_txsync(struct netmap_kring *kring, int flags)
 	if (nm_i != head) {	/* we have new packets to send */
 		uint32_t pkt_len = 0, seg_idx = 0;
 		int nic_i_start = -1, flags = 0;
-		pkt_info_zero(&pi);
+		memset(&pi, 0, sizeof(pi));
 		pi.ipi_segs = txq->ift_segs;
 		pi.ipi_qsidx = kring->ring_id;
 		nic_i = netmap_idx_k2n(kring, nm_i);
@@ -1261,7 +1206,7 @@ iflib_netmap_rxsync(struct netmap_kring *kring, int flags)
 		nm_i = netmap_idx_n2k(kring, nic_i);
 		MPASS(nm_i == kring->nr_hwtail);
 		for (n = 0; avail > 0 && nm_i != hwtail_lim; n++, avail--) {
-			rxd_info_zero(&ri);
+			memset(&ri, 0, sizeof(ri));
 			ri.iri_frags = rxq->ifr_frags;
 			ri.iri_qsidx = kring->ring_id;
 			ri.iri_ifp = ctx->ifc_ifp;
@@ -2998,7 +2943,7 @@ iflib_rxeof(iflib_rxq_t rxq, qidx_t budget)
 		/*
 		 * Reset client set fields to their default values
 		 */
-		rxd_info_zero(&ri);
+		memset(&ri, 0, sizeof(ri));
 		ri.iri_qsidx = rxq->ifr_id;
 		ri.iri_cidx = *cidxp;
 		ri.iri_ifp = ifp;
@@ -3580,7 +3525,7 @@ iflib_encap(iflib_txq_t txq, struct mbuf **m_headp)
 	}
 	m_head = *m_headp;
 
-	pkt_info_zero(&pi);
+	memset(&pi, 0, sizeof(pi));
 	pi.ipi_mflags = (m_head->m_flags & (M_VLANTAG | M_BCAST | M_MCAST));
 	pi.ipi_pidx = pidx;
 	pi.ipi_qsidx = txq->ift_id;
@@ -4256,7 +4201,7 @@ iflib_if_transmit(if_t ifp, struct mbuf *m)
 	if (ctx->isc_txq_select_v2) {
 		struct if_pkt_info pi;
 		uint64_t early_pullups = 0;
-		pkt_info_zero(&pi);
+		memset(&pi, 0, sizeof(pi));
 
 		err = iflib_parse_header_partial(&pi, &m, &early_pullups);
 		if (__predict_false(err != 0)) {


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?696113e6.f233.5c1a099f>