On Thu, Jan 22, 2026 at 10:26:33PM -0800, Stephen Hemminger wrote:
> On Tue, 13 Jan 2026 15:14:24 +0000
> Bruce Richardson <[email protected]> wrote:
> 
> > The scalar Tx paths, with support for offloads and multiple mbufs
> > per packet, are almost identical across drivers ice, i40e, iavf and
> > the single-queue mode of idpf. Therefore, we can do some rework to
> > combine these code paths into a single function which is parameterized
> > by compile-time constants, allowing code saving to give us a single
> > path to optimize and maintain - apart from edge cases like IPSec
> > support in iavf.
> > 
> > The ixgbe driver has a number of similarities too, which we take
> > advantage of where we can, but the overall descriptor format is
> > sufficiently different that its main scalar code path is kept
> > separate.
> > 
> > Once merged, we can then optimize the drivers a bit to improve
> > performance, and also easily extend some drivers to use additional
> > paths for better performance, e.g. add the "simple scalar" path
> > to IDPF driver for better performance on platforms without AVX.
> > 
> > V2:
> >  - reworked the simple-scalar path as well as full scalar one
> >  - added simple scalar path support to idpf driver
> >  - small cleanups, e.g. issues flagged by checkpatch
> > 
> > Bruce Richardson (36):
> >   net/intel: create common Tx descriptor structure
> >   net/intel: use common Tx ring structure
> >   net/intel: create common post-Tx cleanup function
> >   net/intel: consolidate definitions for Tx desc fields
> >   net/intel: create separate header for Tx scalar fns
> >   net/intel: add common fn to calculate needed descriptors
> >   net/ice: refactor context descriptor handling
> >   net/i40e: refactor context descriptor handling
> >   net/idpf: refactor context descriptor handling
> >   net/intel: consolidate checksum mask definition
> >   net/intel: create common checksum Tx offload function
> >   net/intel: create a common scalar Tx function
> >   net/i40e: use common scalar Tx function
> >   net/intel: add IPsec hooks to common Tx function
> >   net/intel: support configurable VLAN tag insertion on Tx
> >   net/iavf: use common scalar Tx function
> >   net/i40e: document requirement for QinQ support
> >   net/idpf: use common scalar Tx function
> >   net/intel: avoid writing the final pkt descriptor twice
> >   eal: add macro for marking assumed alignment
> >   net/intel: write descriptors using non-volatile pointers
> >   net/intel: remove unnecessary flag clearing
> >   net/intel: mark mid-burst ring cleanup as unlikely
> >   net/intel: add special handling for single desc packets
> >   net/intel: use separate array for desc status tracking
> >   net/ixgbe: use separate array for desc status tracking
> >   net/intel: drop unused Tx queue used count
> >   net/intel: remove index for tracking end of packet
> >   net/intel: merge ring writes in simple Tx for ice and i40e
> >   net/intel: consolidate ice and i40e buffer free function
> >   net/intel: complete merging simple Tx paths
> >   net/intel: use non-volatile stores in simple Tx function
> >   net/intel: align scalar simple Tx path with vector logic
> >   net/intel: use vector SW ring entry for simple path
> >   net/intel: use vector mbuf cleanup from simple scalar path
> >   net/idpf: enable simple Tx function
> > 
> >  doc/guides/nics/i40e.rst                      |  18 +
> >  drivers/net/intel/common/tx.h                 | 116 ++-
> >  drivers/net/intel/common/tx_scalar_fns.h      | 595 ++++++++++++++
> >  drivers/net/intel/cpfl/cpfl_rxtx.c            |   8 +-
> >  drivers/net/intel/i40e/i40e_fdir.c            |  34 +-
> >  drivers/net/intel/i40e/i40e_rxtx.c            | 670 +++-------------
> >  drivers/net/intel/i40e/i40e_rxtx.h            |  16 -
> >  .../net/intel/i40e/i40e_rxtx_vec_altivec.c    |  25 +-
> >  drivers/net/intel/i40e/i40e_rxtx_vec_avx2.c   |  36 +-
> >  drivers/net/intel/i40e/i40e_rxtx_vec_avx512.c |  52 +-
> >  drivers/net/intel/i40e/i40e_rxtx_vec_common.h |   6 +-
> >  drivers/net/intel/i40e/i40e_rxtx_vec_neon.c   |  25 +-
> >  drivers/net/intel/iavf/iavf_rxtx.c            | 642 ++++-----------
> >  drivers/net/intel/iavf/iavf_rxtx.h            |  30 +-
> >  drivers/net/intel/iavf/iavf_rxtx_vec_avx2.c   |  55 +-
> >  drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c | 104 +--
> >  drivers/net/intel/iavf/iavf_rxtx_vec_common.h |  36 +-
> >  drivers/net/intel/ice/ice_dcf_ethdev.c        |  10 +-
> >  drivers/net/intel/ice/ice_rxtx.c              | 737 ++++--------------
> >  drivers/net/intel/ice/ice_rxtx.h              |  15 -
> >  drivers/net/intel/ice/ice_rxtx_vec_avx2.c     |  55 +-
> >  drivers/net/intel/ice/ice_rxtx_vec_avx512.c   |  53 +-
> >  drivers/net/intel/ice/ice_rxtx_vec_common.h   |  43 +-
> >  drivers/net/intel/idpf/idpf_common_device.h   |   2 +
> >  drivers/net/intel/idpf/idpf_common_rxtx.c     | 315 ++------
> >  drivers/net/intel/idpf/idpf_common_rxtx.h     |  24 +-
> >  .../net/intel/idpf/idpf_common_rxtx_avx2.c    |  53 +-
> >  .../net/intel/idpf/idpf_common_rxtx_avx512.c  |  55 +-
> >  drivers/net/intel/idpf/idpf_rxtx.c            |  43 +-
> >  drivers/net/intel/idpf/idpf_rxtx_vec_common.h |   6 +-
> >  drivers/net/intel/ixgbe/ixgbe_rxtx.c          | 103 ++-
> >  .../net/intel/ixgbe/ixgbe_rxtx_vec_common.c   |   3 +-
> >  lib/eal/include/rte_common.h                  |   6 +
> >  33 files changed, 1565 insertions(+), 2426 deletions(-)
> >  create mode 100644 drivers/net/intel/common/tx_scalar_fns.h
> > 
> 
> Series-Acked-by: Stephen Hemminger <[email protected]>
> 
> Love to see common code and "fix it once"
> It was too large for the batch scripts, but here is AI review.
> It sees only minor stuff which you could fix (or skip).
> 

Thanks for running the AI review.

> # DPDK Patch Review: Intel Tx Consolidation Series
> 
> **Series:** [PATCH v2 01-36/36] Intel Tx driver consolidation  
> **Author:** Bruce Richardson <[email protected]>  
> **Review Date:** 2026-01-22  
> **Review Against:** AGENTS.md (DPDK Code Review Guidelines)
> 
> ---
> 
> ## Executive Summary
> 
> This 36-patch series consolidates Tx descriptor handling across Intel network 
> drivers (i40e, iavf, ice, idpf, ixgbe). Overall the patches are 
> **well-structured** with proper code organization, but there are several 
> **issues requiring attention** before merge.
> 
> | Severity | Count | Summary |
> |----------|-------|---------|
> | **Error** | 1 | Source code line exceeds 100 characters |
> | **Warning** | 5 | Commit message style issues, double blank lines |
> | **Info** | 2 | Minor style observations |
> 
> ---
> 
> ## Detailed Findings
> 
> ### ERRORS (Must Fix)
> 
> #### 1. Source Code Line Length Violation
> **Patch 17/36:** `net/i40e: document requirement for QinQ support`  
> **Location:** `drivers/net/intel/i40e/i40e_rxtx.c`  
> **Issue:** Line exceeds 100-character limit (135 characters)
> 
> ```c
> PMD_DRV_LOG(WARNING, "Double VLAN insertion may not work correctly without 
> RTE_ETH_RX_OFFLOAD_VLAN_EXTEND set in Rx configuration.");
> ```
> 
> **Fix:** Split the log message across multiple lines or into multiple log 
> calls:
> ```c
> PMD_DRV_LOG(WARNING, "Double VLAN insertion may not work correctly "
>             "without RTE_ETH_RX_OFFLOAD_VLAN_EXTEND in Rx config.");
> ```
> 

This is one where the AI guidelines need an update. We need to teach it
that it's better to have a long line than to split error messages.

/Bruce

Reply via email to