Re: [PATCH v4 10/35] net/intel: create common checksum Tx offload function

Bruce Richardson
2026-02-10T17:56:52Z

On Tue, Feb 10, 2026 at 02:04:55PM +0100, Burakov, Anatoly wrote:
> On 2/9/2026 5:45 PM, Bruce Richardson wrote:
> > Since i40e and ice have the same checksum offload logic, merge their
> > functions into one. Future rework should enable this to be used by more
> > drivers also.
> >
> > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> ---
> > drivers/net/intel/common/tx_scalar.h | 58 +++++++++++++++++++++++++++
> > drivers/net/intel/i40e/i40e_rxtx.c | 52 +-----------------------
> > drivers/net/intel/i40e/i40e_rxtx.h | 1 +
> > drivers/net/intel/ice/ice_rxtx.c | 60 +---------------------------
> > drivers/net/intel/ice/ice_rxtx.h | 1 + 5 files changed, 62
> > insertions(+), 110 deletions(-)
> >
> > diff --git a/drivers/net/intel/common/tx_scalar.h
> > b/drivers/net/intel/common/tx_scalar.h index 573f5136a9..cf0dcb4b2c
> > 100644 --- a/drivers/net/intel/common/tx_scalar.h +++
> > b/drivers/net/intel/common/tx_scalar.h @@ -59,6 +59,64 @@
> > ci_tx_xmit_cleanup(struct ci_tx_queue *txq) return 0; } +/* Common
> > checksum enable function for Intel drivers (ice, i40e, etc.) */ +static
> > inline void +ci_txd_enable_checksum(uint64_t ol_flags, +
> > uint32_t *td_cmd, + uint32_t *td_offset, +
> > union ci_tx_offload tx_offload) +{ + /* Enable L3 checksum
> > offloads */ + if (ol_flags & RTE_MBUF_F_TX_IP_CKSUM) { +
> > *td_cmd |= CI_TX_DESC_CMD_IIPT_IPV4_CSUM; + *td_offset |=
> > (tx_offload.l3_len >> 2) << +
> > CI_TX_DESC_LEN_IPLEN_S; + } else if (ol_flags & RTE_MBUF_F_TX_IPV4) {
> > + *td_cmd |= CI_TX_DESC_CMD_IIPT_IPV4; + *td_offset
> > |= (tx_offload.l3_len >> 2) << +
> > CI_TX_DESC_LEN_IPLEN_S; + } else if (ol_flags & RTE_MBUF_F_TX_IPV6) {
> > + *td_cmd |= CI_TX_DESC_CMD_IIPT_IPV6; + *td_offset
> > |= (tx_offload.l3_len >> 2) << +
> > CI_TX_DESC_LEN_IPLEN_S; + } + + if (ol_flags &
> > RTE_MBUF_F_TX_TCP_SEG) { + *td_cmd |=
> > CI_TX_DESC_CMD_L4T_EOFT_TCP; + *td_offset |=
> > (tx_offload.l4_len >> 2) << +
> > CI_TX_DESC_LEN_L4_LEN_S; + return; + } + + if
> > (ol_flags & RTE_MBUF_F_TX_UDP_SEG) { + *td_cmd |=
> > CI_TX_DESC_CMD_L4T_EOFT_UDP; + *td_offset |=
> > (tx_offload.l4_len >> 2) << +
> > CI_TX_DESC_LEN_L4_LEN_S; + return; + } + + /* Enable
> > L4 checksum offloads */ + switch (ol_flags & RTE_MBUF_F_TX_L4_MASK) {
> > + case RTE_MBUF_F_TX_TCP_CKSUM: + *td_cmd |=
> > CI_TX_DESC_CMD_L4T_EOFT_TCP; + *td_offset |=
> > (sizeof(struct rte_tcp_hdr) >> 2) << +
> > CI_TX_DESC_LEN_L4_LEN_S; + break; + case
> > RTE_MBUF_F_TX_SCTP_CKSUM: + *td_cmd |=
> > CI_TX_DESC_CMD_L4T_EOFT_SCTP; + *td_offset |=
> > (sizeof(struct rte_sctp_hdr) >> 2) << +
> > CI_TX_DESC_LEN_L4_LEN_S; + break; + case
> > RTE_MBUF_F_TX_UDP_CKSUM: + *td_cmd |=
> > CI_TX_DESC_CMD_L4T_EOFT_UDP; + *td_offset |=
> > (sizeof(struct rte_udp_hdr) >> 2) << +
> > CI_TX_DESC_LEN_L4_LEN_S; + break; + default: +
> > break; + }
>
> Nitpick: some of the indentation here is inconststent. Perhaps enabling
> whitespace view in your editor would help, if you haven't done so?
>
> (the inconsistency was already present in the ice function but that
> doesn't mean we have to copy it!)
>
Yep, I suspect the indentation was meant to align with opening braces but
that of course gets messed up when renaming things in refactoring (or in
this case adding in an extra "*" dereference char). Will clean this up in
v5.

/Bruce