Skip to content

Conversation

@ovsrobot
Copy link
Owner

@ovsrobot ovsrobot commented Nov 26, 2025

NOTE: This is an auto submission for "[v4] event/cnxk: fix offload flags".

See "http://patchwork.dpdk.org/project/dpdk/list/?series=36802" for details.

Summary by Sourcery

Refine burst size handling, link speed configuration, and buffer sizing across examples while aligning cnxk eventdev offload flags and mlx5 flex parser behavior with updated hardware capabilities and removing unused steering modes.

New Features:

  • Add separate configurable RX and TX burst sizes and optional forced Ethernet link speed to the l3fwd and l3fwd-power sample applications.

Bug Fixes:

  • Fix cnxk event device workers and flush paths to use the configured RX offload flags instead of hard-coded masks.
  • Correct mlx5 flex parser header length handling by using capability-driven offset modes and offset masks for legacy and new firmware.
  • Prevent potential buffer overflows and overlong names in sample apps and utilities by tightening buffer sizes and validating lcore/queue values when constructing pool and ring names.
  • Ensure drivers consistently provide a tx_pkt_prepare callback by default instead of leaving it NULL when disabling datapaths or using simple TX paths.
  • Avoid use of uninitialized variables in cnxk RX/vector processing paths and related helpers.

Enhancements:

  • Simplify mlx5 shared device context flow configuration by dropping unused HWS/SW steering owner capability handling and always enabling DV flow in supported configurations.
  • Make l3fwd burst size logging and TX buffering thresholds respect user-configured RX/TX burst sizes and expose these via common headers.
  • Tighten option parsing, argument handling, and naming limits in example applications such as vdpa, ip_reassembly, and server_node_efd for better robustness.

Build:

  • Clean up example build flags by removing the GCC-format-truncation suppression from the Meson configuration.

Documentation:

  • Tag API and guides documentation targets with a dedicated install group to better integrate with packaging systems and update assorted NIC and getting-started documentation for the new release.

Summary by CodeRabbit

  • New Features

    • Added command-line options for configurable RX/TX burst sizes and link speed in examples.
    • Added support for AMD EPYC TURIN platform with Solarflare NIC integration.
    • Added Pollara 400 single-port 400G AI NIC support.
  • Documentation

    • Updated mlx5 flow steering documentation with new synchronous API limitations and configuration requirements.
    • Updated driver/firmware compatibility matrices for i40e and ice NICs.
    • Updated FreeBSD build prerequisites (Python 3.11).
    • Expanded tested platforms list with comprehensive platform configurations.
  • Chores

    • Version bumped to 25.11.0-rc4.
    • Updated copyright years to 2025.
    • Build system metadata updates for documentation artifacts.

✏️ Tip: You can customize this high-level summary in your review settings.

MaayanKashani1 and others added 24 commits November 24, 2025 09:24
Enhance the documentation by adding information about limitations
specific to the synchronous API when used with hardware steering.
This update provides users with a more comprehensive understanding
of the constraints in this configuration.

Signed-off-by: Maayan Kashani <mkashani@nvidia.com>
Signed-off-by: Bing Zhao <bingz@nvidia.com>
Add tested, and hence recommended, firmware and other versions for i40e
and ice drivers. In the process remove version inform for obsolete DPDK
releases.

Signed-off-by: Hailin Xu <hailinx.xu@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
There is the updated firmware providing the new capability
bit "header_length_field_offset_mode". If this bit is set
the length field offset in flex parser configuration should
not be adjusted by the supported field mask left margin,
and the bit "header_length_field_offset_mode" should be set
in configuration command on the flex parser creation
firmware call.

Fixes: b04b06f ("net/mlx5: fix flex item header length field translation")
Cc: stable@dpdk.org

Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
The update of flow engine devargs introduced a regression
with untrusted VFs/SFs.
Using HWS engine caused a degradation in probing 1K SFs,
because memzone segments exceeds maximum 2560.

Fixes: 53fdc23 ("common/mlx5: read SW steering capability bits")
Fixes: d1ac7b6 ("net/mlx5: update flow devargs handling for future HW")

Signed-off-by: Raslan Darawsheh <rasland@nvidia.com>
Count flow action is supported on root table with HW Steering
flow engine with upstream drivers/libraries and
drivers/libraries packaged with recently released DOCA.
This patch updates relevant docs with minimum DOCA version.

Signed-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>
Acked-by: Bing Zhao <bingz@nvidia.com>
Previously, the Tx burst size in l3fwd was fixed at 256, which could
lead to suboptimal performance in certain scenarios.

This patch introduces separate --rx-burst and --tx-burst options to
explicitly configure Rx and Tx burst sizes. By default, the Tx burst
size now matches the Rx burst size for better efficiency and pipeline
balance.

Fixes: d5c4897 ("examples/l3fwd: add option to set Rx burst size")

Signed-off-by: Sivaprasad Tummala <sivaprasad.tummala@amd.com>
Tested-by: Venkat Kumar Ande <venkatkumar.ande@amd.com>
Tested-by: Dengdui Huang <huangdengdui@huawei.com>
Tested-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
Currently, l3fwd starts in auto-negotiation mode, but it may fail to
link up when auto-negotiation is not supported. Therefore, it is
necessary to support starting with a specified speed for port.

Additionally, this patch does not support changing the duplex mode.
So speeds like 10M, 100M are not configurable using this method.

Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
Reviewed-by: Chengwen Feng <fengchengwen@huawei.com>
Currently, l3fwd-power starts in auto-negotiation mode, but it may fail
to link up when auto-negotiation is not supported. Therefore, it is
necessary to support starting with a specified speed for port.

Additionally, this patch does not support changing the duplex mode.
 So speeds like 10M, 100M are not configurable using this method.

Signed-off-by: Dengdui Huang <huangdengdui@huawei.com>
Reviewed-by: Chengwen Feng <fengchengwen@huawei.com>
If format-truncation is enabled, the compiler detects a string overflow
since the snprintf() is putting ethernet address and new line
in buffer only sized for the address.

Since get_rx_queue_name() is used to create a ring name.
The buffer should be sized to be a valid ring name.
This fixes some format-overflow warnings and also corrects
for future errors.

In file included from ../examples/server_node_efd/efd_server/main.c:31:
In function ‘get_printable_mac_addr’,
    inlined from ‘do_stats_display’ at ../examples/server_node_efd/efd_server/main.c:136:3:
../lib/net/rte_ether.h:248:36: warning: ‘snprintf’ output truncated before the last format character [-Wformat-truncation=]
  248 | #define RTE_ETHER_ADDR_PRT_FMT     "%02X:%02X:%02X:%02X:%02X:%02X"
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../examples/server_node_efd/efd_server/main.c:86:33: note: in expansion of macro ‘RTE_ETHER_ADDR_PRT_FMT’
   86 |                                 RTE_ETHER_ADDR_PRT_FMT "\n",
      |                                 ^~~~~~~~~~~~~~~~~~~~~~
../examples/server_node_efd/efd_server/main.c: In function ‘do_stats_display’:
../examples/server_node_efd/efd_server/main.c:86:59: note: format string is defined here
   86 |                                 RTE_ETHER_ADDR_PRT_FMT "\n",
      |

Fixes: 39aad0e ("examples/flow_distributor: new example to demonstrate EFD")
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
The ifname is limited to 128 characters, but it would allow up
to 128 characters as prefix then could overflow creating ifname.

Change to limit path prefix (iface) to 123 (128 - sizeof("1024"))
to avoid possible format overflow

../examples/vdpa/main.c:501:76: warning: ‘snprintf’ output may be truncated before the last format character [-Wformat-truncation=]
  501 |                         snprintf(vports[devcnt].ifname, MAX_PATH_LEN, "%s%d",
      |                                                                            ^
../examples/vdpa/main.c:501:25: note: ‘snprintf’ output between 2 and 139 bytes into a destination of size 128
  501 |                         snprintf(vports[devcnt].ifname, MAX_PATH_LEN, "%s%d",
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  502 |                                         iface, devcnt);
      |

Fixes: 38f8ab0 ("vhost: make vDPA framework bus agnostic")
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
In theory, lcore and queue could be so large that mbuf pool name
could overflow. But that can never happen since lcore and queue
will be in range. Add a check so that static tools know that.
Format overflow warnings seen on older versions of Gcc only.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Konstantin Ananyev <konstantin.ananyev@huawei.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
There were several hidden bugs in examples because format
truncation warning was disabled.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
After removing callback checks from ethdev fast path,
some drivers crashed because tx_pkt_prepare was set to NULL.

Some drivers (hns3, ngbe, txgbe) need to use rte_eth_tx_pkt_prepare_dummy
when configuring queues.
Other drivers (ntnic, softnic) does not need to set tx_pkt_prepare
as it was set by eth_dev_set_dummy_fops() called by rte_eth_dev_allocate().

Bugzilla ID: 1834
Fixes: 066f3d9 ("ethdev: remove callback checks from fast path")

Reported-by: Jiawen Wu <jiawenwu@trustnetic.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Morten Brørup <mb@smartsharesystems.com>
Tested-by: Jiawen Wu <jiawenwu@trustnetic.com>
The Pollara 400 AI NIC is supported without any PMD changes.
Add a link to the product brief.

Cc: stable@dpdk.org

Signed-off-by: Andrew Boyer <andrew.boyer@amd.com>
changes:

 1. fix spelling from `SIENNA` to `SIENA`
 2. add tuning guide for zen5 AMD Epyc 9005
 3. add uncore power details
 4. update on using AMD Solarflare X4 and X2

Signed-off-by: Vipin Varghese <vipin.varghese@amd.com>
Tested-by: Thiyagarajan P <thiyagarajan.p@amd.com>
Updated some external links and removed a note which does not
apply to MSVC builds anymore.

Also reworded a sentence clarifying how to open a Visual Studio
Developer Command Prompt from CMD and Powershell, as the
original text could induce people to run VsDevCmd.bat from
a Powershell prompt, which does not work.

Signed-off-by: Andre Muezerie <andremue@linux.microsoft.com>
The note about the prefix of the package pyelftools was not showed
in the documentation output because the syntax was missing a colon,
so it was considered as a simple comment in the source file.

Fixes: 9e6f75e ("doc: update build section of FreeBSD guide")
Cc: stable@dpdk.org

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
The version python used in current FreeBSD stable release 14.3
is now 3.11. Update documentation accordingly.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
KNI was removed from DPDK but the diagrams in the documentation
were left behind.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
This allows building and installing only the documentation, without
recompiling the whole project, using:

meson build -Denable_docs=true
meson compile -C build doc
meson install -C build --no-rebuild --tags doc

In Debian/Ubuntu the documentation is built separately from the binaries,
in a separate architecture-independent build job, so that it has to be
done only once, instead of once per supported architecture.

Signed-off-by: Luca Boccassi <bluca@debian.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Add tested platforms with NVIDIA NICs to the 25.11 release notes.

Signed-off-by: Raslan Darawsheh <rasland@nvidia.com>
Add tested Intel platforms with Intel NICs to v25.11 release note.

Signed-off-by: Yu Jiang <yux.jiang@intel.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Use device configured Rx offloads instead of hardcoded values while
draining work.

Fixes: e8594de ("event/cnxk: implement event port quiesce function")
Cc: stable@dpdk.org

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
@sourcery-ai
Copy link

sourcery-ai bot commented Nov 26, 2025

Reviewer's Guide

This PR adjusts CNXK eventdev offload flag handling and makes a series of small correctness, API‑alignment, and robustness fixes across examples, mlx5, other PMDs, and documentation/meson, including separating RX/TX burst configuration, adding eth link speed CLI options, improving flex parser configuration for new firmware, and tightening several buffer sizes and defaults.

Class diagram for updated mlx5 flex parser configuration

classDiagram
    class mlx5_hca_flex_attr {
        +uint8_t sample_outer_ipv4
        +uint8_t sample_outer_ipv6
        +uint8_t sample_tunnel_inner
        +uint8_t sample_tunnel_inner2
        +uint8_t zero_size_supported
        +uint8_t sample_id_in_out
        +uint8_t header_length_field_mode_wa
        +uint16_t max_base_header_length
        +uint8_t max_sample_base_offset
        +uint16_t max_next_header_offset
        +uint8_t header_length_mask_width
    }

    class mlx5_devx_graph_node_attr {
        +uint16_t header_length_base_value
        +uint8_t header_length_field_shift
        +uint16_t header_length_field_offset
        +uint8_t header_length_field_offset_mode
        +uint32_t header_length_field_mask
        +uint16_t next_header_field_offset
    }

    class mlx5_devx_cmd_query_hca_parse_graph_node_cap {
        +int mlx5_devx_cmd_query_hca_parse_graph_node_cap(ctx, attr)
    }

    class mlx5_flex_translate_length {
        +int mlx5_flex_translate_length(attr, field, node, error)
    }

    class mlx5_devx_cmd_create_flex_parser {
        +void *mlx5_devx_cmd_create_flex_parser(ctx, data)
    }

    mlx5_devx_cmd_query_hca_parse_graph_node_cap --> mlx5_hca_flex_attr : populates
    mlx5_flex_translate_length --> mlx5_hca_flex_attr : reads
    mlx5_flex_translate_length --> mlx5_devx_graph_node_attr : writes
    mlx5_devx_cmd_create_flex_parser --> mlx5_devx_graph_node_attr : reads

    %% New behavior relationships
    mlx5_hca_flex_attr : +header_length_field_mode_wa controls offset WA
    mlx5_devx_graph_node_attr : +header_length_field_offset_mode selects HW offset mode
Loading

Class diagram for l3fwd RX/TX burst usage in main loop and TX path

classDiagram
    class l3fwd_globals {
        +uint32_t rx_burst_size
        +uint32_t tx_burst_size
        +uint16_t nb_rxd
        +uint16_t nb_txd
    }

    class lcore_conf {
        +uint16_t tx_queue_id[]
        +struct tx_buffer tx_mbufs[]
    }

    class acl_main_loop {
        +void acl_main_loop(dummy)
    }

    class em_main_loop {
        +void em_main_loop(dummy)
    }

    class fib_main_loop {
        +void fib_main_loop(dummy)
    }

    class lpm_main_loop {
        +void lpm_main_loop(dummy)
    }

    class send_single_packet {
        +void send_single_packet(qconf, mbuf, port)
    }

    class send_packetsx4 {
        +void send_packetsx4(qconf, port, m, num)
    }

    l3fwd_globals <.. acl_main_loop : uses rx_burst_size
    l3fwd_globals <.. em_main_loop : uses rx_burst_size
    l3fwd_globals <.. fib_main_loop : uses rx_burst_size
    l3fwd_globals <.. lpm_main_loop : uses rx_burst_size
    l3fwd_globals <.. send_single_packet : uses rx_burst_size
    l3fwd_globals <.. send_packetsx4 : uses tx_burst_size

    acl_main_loop --> lcore_conf : reads queues
    em_main_loop --> lcore_conf : reads queues
    fib_main_loop --> lcore_conf : reads queues
    lpm_main_loop --> lcore_conf : reads queues

    acl_main_loop : rte_eth_rx_burst(..., rx_burst_size)
    em_main_loop : rte_eth_rx_burst(..., rx_burst_size)
    fib_main_loop : rte_eth_rx_burst(..., rx_burst_size)
    lpm_main_loop : rte_eth_rx_burst(..., rx_burst_size)
    send_single_packet : triggers send_burst when buffered == rx_burst_size
    send_packetsx4 : sends directly when num >= tx_burst_size and buffer empty
Loading

Flow diagram for l3fwd parse_pkt_burst RX vs TX behavior

flowchart TD
    A[Start parse_pkt_burst with optarg, is_rx_burst, burst_sz] --> B[Convert optarg to pkt_burst]
    B --> C{pkt_burst > MAX_PKT_BURST?}
    C -- Yes --> D[Log info: user burst must be <= MAX_PKT_BURST<br/>Using default *burst_sz]
    D --> Z[End]
    C -- No --> E{pkt_burst > 0?}
    E -- Yes --> F[Set *burst_sz = pkt_burst]
    F --> Z
    E -- No, pkt_burst == 0 --> G{is_rx_burst?}
    G -- Yes --> H[Query PMD via rte_eth_dev_info_get]
    H --> I{ret != 0?}
    I -- Yes --> Z
    I -- No --> J[burst_size = dev_info.default_rxportconf.burst_size]
    J --> K{burst_size == 0?}
    K -- Yes --> L[Log: PMD does not recommend burst<br/>Use default rx_burst_size]
    L --> Z
    K -- No --> M{burst_size > MAX_PKT_BURST?}
    M -- Yes --> N[Log: PMD recommended burst too large<br/>Use default rx_burst_size]
    N --> Z
    M -- No --> O[Set *burst_sz = burst_size<br/>Log RX burst from PMD]
    O --> Z
    G -- No, TX --> P[Log: TX burst is 0<br/>Use default *burst_sz]
    P --> Z
Loading

File-Level Changes

Change Details Files
Split l3fwd RX/TX burst configuration and plumb separate burst sizes through the example and ACL/EM/FIB/LPM variants.
  • Replace global nb_pkt_per_burst with rx_burst_size and introduce tx_burst_size for TX path control.
  • Update CLI options and usage text from --burst to --rx-burst/--tx-burst and wire them into parse_args.
  • Refactor parse_pkt_burst to accept a direction flag and target variable, querying PMD defaults only for RX and logging appropriately for TX==0.
  • Propagate rx_burst_size/tx_burst_size into l3fwd_common.h, l3fwd.h, send_burst/send_packetsx4, and all l3fwd main loops to use the new variables.
examples/l3fwd/main.c
examples/l3fwd/l3fwd.h
examples/l3fwd/l3fwd_common.h
examples/l3fwd/l3fwd_acl.c
examples/l3fwd/l3fwd_em.c
examples/l3fwd/l3fwd_fib.c
examples/l3fwd/l3fwd_lpm.c
Add an eth-link-speed CLI parameter to l3fwd and l3fwd-power to force link speed via port_conf.link_speeds.
  • Declare CMD_LINK_OPT_ETH_LINK_SPEED and add it to long options tables.
  • Parse the new option, validate unsupported 10M/100M fixed speeds, and map numeric input to rte_eth_speed_bitflag for port_conf.link_speeds.
  • Update usage text to advertise the new option and include defaults correctly.
examples/l3fwd/main.c
examples/l3fwd-power/main.c
Adjust CNXK eventdev flush/quiesce paths to respect configured rx_offloads when fetching work.
  • Replace hard-coded NIX_RX_OFFLOAD_* combinations passed to cn10k_sso_hws_get_work_empty with dev->rx_offloads in flush and quiesce paths.
  • Likewise update cn20k_sso_hws_get_work_empty calls to pass dev->rx_offloads so offloads used during normal operation are honored during drain/flush.
drivers/event/cnxk/cn10k_eventdev.c
drivers/event/cnxk/cn20k_eventdev.c
Update mlx5 flex parser handling and HCA capability structures to support new header_length_field_offset_mode and remove unused SW owner fields and HWS/duplicate-pattern logic.
  • Extend mlx5_devx_graph_node_attr and ifc bitfield structs to carry header_length_field_offset_mode capability and flex config.
  • On query, set header_length_field_mode_wa based on device capability; on create, program header_length_field_offset_mode.
  • In mlx5_alloc_srh_flex_parser, choose header_length_field_offset differently for legacy vs new firmware based on header_length_field_mode_wa.
  • In mlx5_flex_translate_length, gate legacy offset workaround on header_length_field_mode_wa and set node->header_length_field_offset_mode accordingly.
  • Remove rx_sw_owner/tx_sw_owner/esw_sw_owner fields from mlx5_hca_attr and their population, and simplify mlx5_shared_dev_ctx_args_config by dropping HWS vs SWS detection, dv_flow_en=2 mode, and duplicate-pattern allow/disallow handling.
drivers/net/mlx5/mlx5.c
drivers/common/mlx5/mlx5_devx_cmds.c
drivers/common/mlx5/mlx5_devx_cmds.h
drivers/common/mlx5/mlx5_prm.h
drivers/net/mlx5/mlx5_flow_flex.c
Tighten buffer sizes and string handling in several examples to respect DPDK limits and avoid truncation issues.
  • Reduce vdpa iface buffer size based on MAX_VDPA_SAMPLE_PORTS and adjust parsing to use strcmp and sizeof(iface) with rte_strscpy.
  • Check lcore/queue ranges in ip_reassembly before building pool names to avoid overly long mbuf pool names.
  • Use RTE_RING_NAMESIZE for EFD server RX queue ring names and RTE_ETHER_ADDR_FMT_SIZE+1 for MAC string buffers.
  • Drop the -Wno-format-truncation test from examples default_cflags to rely on default compiler behavior.
examples/vdpa/main.c
examples/ip_reassembly/main.c
examples/server_node_efd/shared/common.h
examples/server_node_efd/efd_server/main.c
examples/meson.build
Clean up CNXK RX paths and event workers by initializing variables and reordering declarations to avoid uninitialized use warnings.
  • Initialize various local variables (e.g., inb_priv, cq_w5, lbase/laddr/lmt_id/d_off/buf_sz) to safe defaults in CN10K/CN20K RX vector code and event workers.
  • Reorder declarations to group related variables and satisfy compiler expectations.
drivers/event/cnxk/cn10k_worker.h
drivers/event/cnxk/cn20k_worker.h
drivers/net/cnxk/cn10k_rx.h
drivers/net/cnxk/cn20k_rx.h
Standardize tx_pkt_prepare behavior across several PMDs to use rte_eth_tx_pkt_prepare_dummy instead of NULL and minor cleanup in other drivers.
  • For hns3, ngbe, txgbe, set dev->tx_pkt_prepare to rte_eth_tx_pkt_prepare_dummy when disabling TX or selecting simple TX code path, instead of NULL.
  • Remove redundant tx_pkt_prepare=NULL initialization in ntnic and softnic PMDs to rely on defaults or dummy function where appropriate.
drivers/net/hns3/hns3_rxtx.c
drivers/net/ngbe/ngbe_rxtx.c
drivers/net/txgbe/txgbe_rxtx.c
drivers/net/ntnic/ntnic_ethdev.c
drivers/net/softnic/rte_eth_softnic.c
Improve documentation and build configuration around Doxygen/doc install tagging and update release/guide docs.
  • Add install_tag 'doc' to Doxygen example/api HTML/MAN and guides custom_targets so docs can be selectively installed.
  • Update various .rst guide files (nics, cryptodevs, GSGs, l3_forward sample app, release notes) and bump VERSION for 25.11 as part of release housekeeping.
doc/api/meson.build
doc/guides/meson.build
doc/guides/cryptodevs/ionic.rst
doc/guides/freebsd_gsg/build_dpdk.rst
doc/guides/linux_gsg/amd_platform.rst
doc/guides/nics/i40e.rst
doc/guides/nics/ice.rst
doc/guides/nics/ionic.rst
doc/guides/nics/mlx5.rst
doc/guides/rel_notes/release_25_11.rst
doc/guides/sample_app_ug/l3_forward.rst
doc/guides/windows_gsg/build_dpdk.rst
VERSION

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai
Copy link

coderabbitai bot commented Nov 26, 2025

Walkthrough

Version bump from rc3 to rc4, extensive documentation updates for platform compatibility and NIC models, MLX5 driver structural changes for header length field handling, CNXK driver offload mask refactoring, network driver TX packet preparation cleanup, and L3 forwarding example burst sizing refactor.

Changes

Cohort / File(s) Summary
Version & Build Configuration
VERSION, doc/api/meson.build, doc/guides/meson.build, examples/meson.build
Version string updated to rc4; install_tag metadata added to three Meson doc targets; removed -Wno-format-truncation compiler flag.
Documentation: Platform Guides
doc/guides/linux_gsg/amd_platform.rst, doc/guides/freebsd_gsg/build_dpdk.rst, doc/guides/windows_gsg/build_dpdk.rst, doc/guides/sample_app_ug/l3_forward.rst
Updated Python version references (py38→py311), corrected BERGAMO
Documentation: NIC & Cryptodev Guides
doc/guides/cryptodevs/ionic.rst, doc/guides/nics/ionic.rst, doc/guides/nics/i40e.rst, doc/guides/nics/ice.rst, doc/guides/nics/mlx5.rst
Updated copyright years (2021-2024→2025, 2018-2022→2025), added Pollara 400 NIC entries to IONIC guides, updated i40e/ice compatibility tables with v25.11 mappings, documented MLX5 DV flow defaults and synchronous API limitations.
Documentation: Release Notes
doc/guides/rel_notes/release_25_11.rst
Added comprehensive Tested Platforms section detailing Intel/NVIDIA/IBM Power 9 configurations with CPU, OS, NIC, firmware, and driver details.
MLX5 Common Driver: DevX & PRM
drivers/common/mlx5/mlx5_devx_cmds.c, drivers/common/mlx5/mlx5_devx_cmds.h, drivers/common/mlx5/mlx5_prm.h
Added header_length_field_mode_wa and header_length_field_offset_mode fields to DevX structures; removed legacy rx/tx_sw_owner bitfields; converted steering format enum to preprocessor macros; adjusted parse graph and flow table capability bitfield layouts.
MLX5 Net Driver
drivers/net/mlx5/mlx5.c, drivers/net/mlx5/mlx5_flow_flex.c
Refactored header length offset logic using header_length_field_mode_wa flag; removed static capability probing functions and simplified DV flow configuration to fixed defaults; gated offset calculation on workaround flag in flex parser.
CNXK Event Drivers
drivers/event/cnxk/cn10k_eventdev.c, drivers/event/cnxk/cn10k_worker.h, drivers/event/cnxk/cn20k_eventdev.c, drivers/event/cnxk/cn20k_worker.h
Replaced hardcoded rx_offloads masks with dynamic dev->rx_offloads values in three event driver call sites; consolidated and initialized local variable declarations (meta_aura, laddr, lmt_id, d_off, mp).
CNXK Net Driver: RX Paths
drivers/net/cnxk/cn10k_rx.h, drivers/net/cnxk/cn20k_rx.h
Added initialization of local variables (inb_priv→NULL, lmt_id/d_off/lbase/laddr→0, cq_w5→0) in RX vector functions to ensure defined initial state.
Network Drivers: TX Packet Prepare
drivers/net/hns3/hns3_rxtx.c, drivers/net/ngbe/ngbe_rxtx.c, drivers/net/txgbe/txgbe_rxtx.c, drivers/net/softnic/rte_eth_softnic.c, drivers/net/ntnic/ntnic_ethdev.c
Replaced NULL assignments of tx_pkt_prepare with rte_eth_tx_pkt_prepare_dummy in non-operational paths (hns3, ngbe, txgbe); removed tx_pkt_prepare initialization (softnic); removed explicit NULL assignment (ntnic).
L3 Forwarding Example: Burst Sizing Refactor
examples/l3fwd/l3fwd.h, examples/l3fwd/l3fwd_common.h, examples/l3fwd/l3fwd_acl.c, examples/l3fwd/l3fwd_em.c, examples/l3fwd/l3fwd_fib.c, examples/l3fwd/l3fwd_lpm.c, examples/l3fwd/main.c
Renamed nb_pkt_per_burst to rx_burst_size; introduced separate tx_burst_size; refactored parse_pkt_burst signature to accept direction flag and pointer; updated RX burst calls across all forwarding engines; added per-direction burst configuration and PMD-derived defaults.
L3 Forwarding Power Example
examples/l3fwd-power/main.c
Added --eth-link-speed command-line option with speed validation (rejects 10M/100M), speed-to-bitflag conversion, and port_conf.link_speeds configuration.
Other Examples: Buffer & Validation Updates
examples/ip_reassembly/main.c, examples/server_node_efd/efd_server/main.c, examples/server_node_efd/shared/common.h, examples/vdpa/main.c
Added lcore/queue validation before pool name construction (ip_reassembly); resized MAC address buffer to RTE_ETHER_ADDR_FMT_SIZE+1 (efd_server); replaced buffer size macro with RTE_RING_NAMESIZE (common.h); introduced MAX_VDPA_STR_LEN macro and reduced iface buffer, changed option parsing (vdpa).

Sequence Diagram(s)

sequenceDiagram
    participant User as L3FWD User
    participant Main as main.c<br/>(parse_args)
    participant Fwd as Forwarding<br/>Engine
    participant PMD as PMD

    User->>Main: Invoke with --rx-burst 64 --tx-burst 128
    Main->>Main: Parse --rx-burst flag
    Main->>Main: Call parse_pkt_burst(optarg,<br/>is_rx_burst=true,<br/>&rx_burst_size)
    alt User-Provided Value
        Main->>Main: Set rx_burst_size = 64
    else Query PMD
        Main->>PMD: Get PMD max RX burst
        PMD-->>Main: Return max burst
        Main->>Main: Set rx_burst_size = PMD value
    end
    Main->>Main: Parse --tx-burst flag
    Main->>Main: Call parse_pkt_burst(optarg,<br/>is_rx_burst=false,<br/>&tx_burst_size)
    alt User-Provided Value
        Main->>Main: Set tx_burst_size = 128
    else Query PMD
        Main->>PMD: Get PMD max TX burst
        PMD-->>Main: Return max burst
        Main->>Main: Set tx_burst_size = PMD value
    end
    Main->>Fwd: Initialize forwarding with<br/>rx_burst_size, tx_burst_size
    Fwd->>PMD: rte_eth_rx_burst(port, q,<br/>mbufs, rx_burst_size)
    PMD-->>Fwd: Packets (≤ rx_burst_size)
    Note over Fwd: Process packets
    Fwd->>PMD: rte_eth_tx_burst(port, q,<br/>mbufs, len, tx_burst_size)
Loading
sequenceDiagram
    participant HW as Hardware
    participant DevX as DevX Layer<br/>(mlx5_prm)
    participant Driver as MLX5 Driver<br/>(mlx5.c)

    HW->>DevX: Report header_length_<br/>field_offset_mode
    DevX->>DevX: Parse capability into<br/>mlx5_ifc_parse_graph_<br/>node_cap_bits
    DevX->>Driver: Query via<br/>mlx5_devx_cmd_query_<br/>hca_parse_graph_node_cap
    Driver->>Driver: Extract attr-><br/>header_length_field_mode_wa<br/>= !hw_mode_flag
    Driver->>Driver: In mlx5_alloc_srh_<br/>flex_parser: check<br/>header_length_field_mode_wa
    alt Workaround Enabled<br/>(legacy FW)
        Driver->>Driver: offset = 8<br/>+ mask_width adjustment
    else Workaround Disabled<br/>(new FW)
        Driver->>Driver: offset = 12<br/>(direct)
    end
    Driver->>HW: Configure flex parser<br/>with computed offset
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Key areas requiring attention:

  • MLX5 struct field changes (mlx5_devx_cmds.h, mlx5_prm.h): Public API structure modifications with bitfield layout adjustments; verify field removal/addition does not break ABI or dependent code.
  • MLX5 capability probing refactor (mlx5.c): Removal of static capability functions and hardcoded DV flow defaults requires validation that simplified defaults work across all supported hardware.
  • L3FWD burst sizing refactor (main.c and five forwarding engine files): Function signature change to parse_pkt_burst and coordinated updates across multiple files; verify consistent burst size propagation and PMD query logic.
  • CNXK offload mask changes (cn10k/cn20k event & net drivers): Dynamic dev->rx_offloads usage replaces hardcoded masks; verify all call sites use correct device context and no race conditions exist.
  • Network driver TX prepare cleanup (hns3, ngbe, txgbe, softnic, ntnic): Mixed patterns (NULL→dummy vs. removal); verify no downstream code expects NULL and handle potential null dereferences.

Poem

🐰 Version four hops in with docs so bright,
MLX5 fields reshape through header light,
Bursts now bend per-direction with finesse,
CNXK offloads dance less hardcoded, blessed!
Drivers clean their prepare, standing tall,
Nine-to-four, a refactored springtime call! 🌱

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 42.11% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title '[PWCI] "[v4] event/cnxk: fix offload flags"' is highly specific and directly addresses the main change: fixing offload flags in the event/cnxk driver.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch series_36802

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey there - I've reviewed your changes - here's some feedback:

  • In ip_reassembly setup_queue_tbl(), the lcore/queue validation uses lcore > RTE_MAX_LCORE || queue > RTE_MAX_QUEUES_PER_PORT, which still allows the invalid values lcore == RTE_MAX_LCORE or queue == RTE_MAX_QUEUES_PER_PORT; consider changing these to >= to avoid constructing overlong pool names with out-of-range IDs.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In ip_reassembly `setup_queue_tbl()`, the lcore/queue validation uses `lcore > RTE_MAX_LCORE || queue > RTE_MAX_QUEUES_PER_PORT`, which still allows the invalid values `lcore == RTE_MAX_LCORE` or `queue == RTE_MAX_QUEUES_PER_PORT`; consider changing these to `>=` to avoid constructing overlong pool names with out-of-range IDs.

## Individual Comments

### Comment 1
<location> `examples/ip_reassembly/main.c:887-892` </location>
<code_context>

 	nb_mbuf = RTE_MAX(nb_mbuf, (uint32_t)NB_MBUF);

+	/* Should never happen but check so that pool name won't be too long. */
+	if (lcore > RTE_MAX_LCORE || queue > RTE_MAX_QUEUES_PER_PORT) {
+		RTE_LOG(ERR, IP_RSMBL, "invalid lcore %u or queue %u",
+			lcore, queue);
</code_context>

<issue_to_address>
**suggestion (bug_risk):** Boundary checks should likely use ">=" and log message should be terminated with a newline.

To fully enforce the intended bounds, treat `RTE_MAX_LCORE` and `RTE_MAX_QUEUES_PER_PORT` as exclusive limits:

```c
if (lcore >= RTE_MAX_LCORE || queue >= RTE_MAX_QUEUES_PER_PORT) {
    RTE_LOG(ERR, IP_RSMBL, "invalid lcore %u or queue %u\n", lcore, queue);
    return -1;
}
```
This prevents accepting the sentinel value (if these macros are counts rather than max indices) and adds a trailing `\n` to keep log output consistent and avoid merged log lines.

```suggestion
	/* Should never happen but check so that pool name won't be too long. */
	if (lcore >= RTE_MAX_LCORE || queue >= RTE_MAX_QUEUES_PER_PORT) {
		RTE_LOG(ERR, IP_RSMBL, "invalid lcore %u or queue %u\n",
			lcore, queue);
		return -1;
	}
```
</issue_to_address>

### Comment 2
<location> `doc/guides/rel_notes/release_25_11.rst:376` </location>
<code_context>
+    * Red Hat Enterprise Linux Server release 9.6
+    * Ubuntu 24.04 LTS
+    * Ubuntu 24.04.3 LTS
+    * Vmware ESXi 8.0.3
+
+  * NICs:
</code_context>

<issue_to_address>
**nitpick (typo):** Use the standard vendor capitalization for VMware

Here, change "Vmware ESXi 8.0.3" to "VMware ESXi 8.0.3" to match the standard product name.

```suggestion
    * VMware ESXi 8.0.3
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
examples/vdpa/main.c (1)

494-506: Add bounds check to prevent array overflow.

The loop iterates over all discovered vDPA devices without verifying that devcnt stays within the vports array bounds. If more than MAX_VDPA_SAMPLE_PORTS (1024) devices are present, this will cause out-of-bounds writes at lines 500-501, leading to memory corruption.

Apply this diff to add a bounds check:

 		RTE_DEV_FOREACH(dev, "class=vdpa", &dev_iter) {
+			if (devcnt >= MAX_VDPA_SAMPLE_PORTS) {
+				RTE_LOG(WARNING, VDPA,
+					"Maximum number of vDPA ports (%d) reached, ignoring remaining devices\n",
+					MAX_VDPA_SAMPLE_PORTS);
+				break;
+			}
 			vdev = rte_vdpa_find_device_by_name(rte_dev_name(dev));
 			if (vdev == NULL) {
 				rte_panic("Failed to find vDPA dev for %s\n",
doc/guides/linux_gsg/amd_platform.rst (1)

25-130: Align power note with new uncore support description.

The new Uncore subsection documents rte_power_uncore support from 25.03 onwards, but the preceding note still says “DPDK uncore support on Linux is work in progress,” which is now contradictory.

Suggested diff to drop the outdated bullet:

 .. note::
 
-   * Power libraries are supported on Linux only.
-   * DPDK uncore support on Linux is work in progress.
+   * Power libraries are supported on Linux only.

The BERGAMO|SIENA correction, TURIN guide link, and Solarflare-on-TURIN NIC guidance all look consistent.

🧹 Nitpick comments (17)
examples/server_node_efd/efd_server/main.c (1)

67-89: MAC address buffer resize correctly fixes potential overflow

Using RTE_ETHER_ADDR_FMT_SIZE + 1 for addresses is appropriate here: the base macro covers the formatted MAC plus terminator, and the extra byte safely accommodates the explicit "\n" in the snprintf() format. This removes the risk of a one-byte overflow while keeping the cached-per-port behavior unchanged.

If you ever drop the trailing newline from the format string, you could also remove the + 1 and leave the buffer at exactly RTE_ETHER_ADDR_FMT_SIZE for slightly clearer intent.

examples/ip_reassembly/main.c (1)

887-892: Tighten the lcore/queue guard and make the pool-name check more robust

The new guard is a good defensive addition, but a couple of small tweaks would make it more precise and robust:

  • Using > instead of >= means values equal to RTE_MAX_LCORE / RTE_MAX_QUEUES_PER_PORT would still be accepted, even though they’re conceptually out of range for IDs.
  • The log line is missing a trailing \n, unlike most other RTE_LOG calls in this file.
  • If the real concern is name length, checking the result of snprintf is a more direct safeguard than relying on numeric bounds.

You could do something like:

-	/* Should never happen but check so that pool name won't be too long. */
-	if (lcore > RTE_MAX_LCORE || queue > RTE_MAX_QUEUES_PER_PORT) {
-		RTE_LOG(ERR, IP_RSMBL, "invalid lcore %u or queue %u",
-			lcore, queue);
-		return -1;
-	}
-
-	snprintf(buf, sizeof(buf), "mbuf_pool_%u_%u", lcore, queue);
+	/* Defensive check so that pool name won't be too long. */
+	if (lcore >= RTE_MAX_LCORE || queue >= RTE_MAX_QUEUES_PER_PORT) {
+		RTE_LOG(ERR, IP_RSMBL, "invalid lcore %u or queue %u\n",
+			lcore, queue);
+		return -1;
+	}
+
+	if (snprintf(buf, sizeof(buf), "mbuf_pool_%u_%u", lcore, queue) >=
+			(int)sizeof(buf)) {
+		RTE_LOG(ERR, IP_RSMBL,
+			"mbuf pool name truncated for lcore %u queue %u\n",
+			lcore, queue);
+		return -1;
+	}

Functionally the current code is fine with existing callers; this just tightens the guard and avoids any silent name truncation.

drivers/net/cnxk/cn20k_rx.h (1)

844-853: Vector Rx locals now defensively initialized; consider narrowing scope

lbase, laddr, buf_sz, and lmt_id/d_off are now zero‑initialized, which avoids “maybe uninitialized” diagnostics and is harmless since they’re only read under NIX_RX_OFFLOAD_SECURITY_F where they are set explicitly first. Optionally, you could declare these inside the security branch to tighten lifetimes, but that’s purely cosmetic.

drivers/net/mlx5/mlx5_flow_flex.c (1)

575-575: Document the inverse relationship between fields.

The assignment node->header_length_field_offset_mode = !attr->header_length_field_mode_wa creates an inverse relationship between these two fields. While this appears intentional and is consistent with the query logic in mlx5_devx_cmds.c (line 916-917), the relationship is not immediately obvious from the field names.

Consider adding a comment explaining this inverse relationship:

 		node->header_length_field_offset = offset;
+		/* offset_mode is the inverse of the workaround flag */
 		node->header_length_field_offset_mode = !attr->header_length_field_mode_wa;
drivers/common/mlx5/mlx5_devx_cmds.h (2)

122-122: Add documentation for the new capability field.

The new header_length_field_mode_wa bitfield lacks documentation explaining its purpose. The "wa" suffix likely means "workaround," but this should be explicitly documented for maintainability.

Consider adding a comment:

 	uint8_t  sample_id_in_out:1;
+	/* Workaround flag: true if hardware requires workaround for header length field mode */
 	uint8_t  header_length_field_mode_wa:1;
 	uint16_t max_base_header_length;

652-652: Add documentation for the new configuration field.

The header_length_field_offset_mode bitfield should be documented to explain its purpose and relationship to header_length_field_mode_wa. This would improve code maintainability and clarify the inverse relationship between these fields.

Consider adding a comment:

 	uint32_t header_length_field_offset:16;
+	/* Offset mode: inverse of workaround flag, written to hardware */
 	uint32_t header_length_field_offset_mode:1;
 	uint32_t header_length_field_mask;
drivers/common/mlx5/mlx5_prm.h (1)

2110-2132: New header_length_field_offset_mode capability bit preserves layout

The split of reserved_at_78[0x3] into reserved_at_78[0x1], header_length_field_offset_mode[0x1], and reserved_at_79[0x1] keeps the total at 3 bits, so the overall bit layout of mlx5_ifc_parse_graph_node_cap_bits is unchanged while adding the new capability. Consider adding an enum or brief comment describing valid values for this mode to aid future readers.

examples/l3fwd-power/main.c (1)

1746-1747: --eth-link-speed parsing looks correct; consider tightening invalid-input handling

The new option wiring (macro, long option entry, local speed_num, and the handler) is consistent and correctly updates port_conf.link_speeds using rte_eth_speed_bitflag(), with explicit rejection of 10M and 100M.

Two minor refinements you may want to consider:

  • Cache rte_eth_speed_bitflag(speed_num, 0) in a local and reuse it instead of calling twice.
  • Today, non-numeric or unsupported speeds (where rte_eth_speed_bitflag() returns 0) are silently ignored. If you want stricter UX, you could treat that as an error and print a short message before print_usage() and return -1, similar to the 10M/100M case.

Functionally fine as-is; these are optional cleanups.

Also applies to: 1753-1753, 1773-1773, 1958-1970

examples/l3fwd/l3fwd_acl.c (1)

1138-1141: RX burst sizing correctly hooked to rx_burst_size; ensure it’s bounded

Switching rte_eth_rx_burst() to use rx_burst_size aligns this loop with the new configurable RX burst behavior and matches the pkts_burst[MAX_PKT_BURST] capacity, assuming:

  • rx_burst_size > 0, and
  • rx_burst_size <= MAX_PKT_BURST.

Please double-check that the CLI parsing for --rx-burst enforces these bounds so we never overrun the pkts_burst and hops arrays.

examples/l3fwd/l3fwd_fib.c (1)

239-243: Configurable RX burst applied here as well; rely on global bounds

Using rx_burst_size for rte_eth_rx_burst() keeps the FIB main loop consistent with the new per-direction burst configuration. As with other loops, this is safe as long as rx_burst_size is validated to be within [1, MAX_PKT_BURST] during option parsing.

examples/l3fwd/l3fwd_lpm.c (1)

204-210: LPM RX loop now honors --rx-burst; confirm max-burst constraints

The LPM main loop now uses rx_burst_size for RX, which is consistent with the rest of the refactor. Please ensure the global rx_burst_size is never configured above MAX_PKT_BURST so the pkts_burst[MAX_PKT_BURST] buffer cannot be overrun.

examples/l3fwd/l3fwd_em.c (1)

643-648: Exact-match RX path uses rx_burst_size; same bounding requirement

The EM main loop’s RX burst size now follows rx_burst_size, consistent with the other lookup modes. As with them, this assumes rx_burst_size is clamped to 1..MAX_PKT_BURST at configuration time to avoid overrunning pkts_burst.

examples/l3fwd/l3fwd_common.h (1)

28-30: tx_burst_size integration into send_packetsx4 looks good; just ensure sane bounds

Switching the early-send condition to:

if (num >= tx_burst_size && len == 0) {
    n = rte_eth_tx_burst(port, qconf->tx_queue_id[port], m, num);
    ...
}

is consistent with the new per-direction TX burst tuning and keeps the buffered path limited by MAX_PKT_BURST.

Two points to keep in mind:

  • Make sure tx_burst_size is initialized to a sensible default (e.g., 32) and validated to 1 <= tx_burst_size <= MAX_PKT_BURST in the CLI parsing, so this fast path doesn’t become a no-op (too large) or overly aggressive (too small/zero).
  • Once send_single_packet() is updated to use tx_burst_size as well, both TX paths will behave consistently with the documented --tx-burst option.

Otherwise, this change is sound.

Also applies to: 66-85

doc/guides/sample_app_ug/l3_forward.rst (1)

80-82: New --rx-burst / --tx-burst documentation aligns with code changes

The added options in the usage synopsis and the detailed bullets match the new per-direction burst variables and defaults (32), and clearly distinguish RX vs TX behavior.

If you later clamp these values in code (e.g., to MAX_PKT_BURST), it might be worth briefly mentioning the effective range here, but that’s optional polish.

Also applies to: 118-121

examples/l3fwd/main.c (2)

703-751: parse_pkt_burst refactor is correct; consider clarifying/aligning TX=0 behavior

The refactored parse_pkt_burst(const char *optarg, bool is_rx_burst, uint32_t *burst_sz) keeps previous semantics for valid values and caps at MAX_PKT_BURST. RX-specific handling of 0 (querying PMD and validating against [1, MAX_PKT_BURST]) is sound, and using *burst_sz as the “default” in log messages is consistent.

Two potential follow‑ups:

  • For TX, pkt_burst == 0 is now just “log and keep default”. If the PMD exposes a recommended TX burst, you might want to mirror the RX path (query and clamp) for symmetry, or at least document in the help that 0 has special meaning only for RX.
  • rte_eth_dev_info_get(0, ...) assumes port 0 as the reference; if recommended burst sizes can differ across ports, consider either documenting that assumption or, longer‑term, deferring PMD‑based tuning until ports are known and picking a representative enabled port.

These are incremental improvements; current behavior is consistent and safe.


881-882: eth-link-speed parsing works but is less strict than other options

The new CMD_LINK_OPT_ETH_LINK_SPEED_NUM branch correctly sets port_conf.link_speeds via rte_eth_speed_bitflag() and explicitly rejects 10M/100M speeds, which matches the stated “unsupported fixed speed” policy. RX/TX burst options are properly routed to parse_pkt_burst() with the right direction flag.

Compared to other parsers in this file (parse_queue_size, parse_pkt_burst), the eth-link-speed branch is relatively permissive:

  • It uses atoi() without checking for invalid input, so values like "abc" or "1G" silently result in no configuration change (speed remains default) with no warning.
  • Negative or otherwise unmappable numeric values are likewise ignored.

If you want behavior consistent with the rest of the CLI, consider:

  • Switching to strtol() and validating the full string was consumed.
  • Treating invalid or unsupported values as an error (or at least emitting a warning) rather than silently ignoring them, so users know their --eth-link-speed request was not applied.

Burst parsing itself is aligned with the new per‑direction global variables.

Also applies to: 930-940, 949-955

doc/guides/windows_gsg/build_dpdk.rst (1)

28-147: Windows build guidance improvements look good; consider HTTPS for Meson link.

The LLVM/MinGW updates and the explicit Visual Studio Developer Command Prompt example plus PowerShell note make the build instructions clearer.

One small consistency tweak: the Meson link still uses HTTP while everything else here is HTTPS; Meson also supports HTTPS.

Suggested doc change:

-Download and install the build system from
-`Meson website <http://mesonbuild.com/Getting-meson.html>`_.
+Download and install the build system from
+`Meson website <https://mesonbuild.com/Getting-meson.html>`_.

Please confirm that the HTTPS URL variant is valid for your docs toolchain.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ef98b88 and ffbd99c.

⛔ Files ignored due to path filters (2)
  • doc/guides/prog_guide/img/kni_traffic_flow.png is excluded by !**/*.png
  • doc/guides/prog_guide/img/pkt_flow_kni.png is excluded by !**/*.png
📒 Files selected for processing (42)
  • VERSION (1 hunks)
  • doc/api/meson.build (3 hunks)
  • doc/guides/cryptodevs/ionic.rst (2 hunks)
  • doc/guides/freebsd_gsg/build_dpdk.rst (1 hunks)
  • doc/guides/linux_gsg/amd_platform.rst (2 hunks)
  • doc/guides/meson.build (1 hunks)
  • doc/guides/nics/i40e.rst (2 hunks)
  • doc/guides/nics/ice.rst (2 hunks)
  • doc/guides/nics/ionic.rst (2 hunks)
  • doc/guides/nics/mlx5.rst (11 hunks)
  • doc/guides/rel_notes/release_25_11.rst (1 hunks)
  • doc/guides/sample_app_ug/l3_forward.rst (2 hunks)
  • doc/guides/windows_gsg/build_dpdk.rst (4 hunks)
  • drivers/common/mlx5/mlx5_devx_cmds.c (2 hunks)
  • drivers/common/mlx5/mlx5_devx_cmds.h (2 hunks)
  • drivers/common/mlx5/mlx5_prm.h (4 hunks)
  • drivers/event/cnxk/cn10k_eventdev.c (3 hunks)
  • drivers/event/cnxk/cn10k_worker.h (1 hunks)
  • drivers/event/cnxk/cn20k_eventdev.c (3 hunks)
  • drivers/event/cnxk/cn20k_worker.h (1 hunks)
  • drivers/net/cnxk/cn10k_rx.h (2 hunks)
  • drivers/net/cnxk/cn20k_rx.h (2 hunks)
  • drivers/net/hns3/hns3_rxtx.c (2 hunks)
  • drivers/net/mlx5/mlx5.c (2 hunks)
  • drivers/net/mlx5/mlx5_flow_flex.c (2 hunks)
  • drivers/net/ngbe/ngbe_rxtx.c (1 hunks)
  • drivers/net/ntnic/ntnic_ethdev.c (0 hunks)
  • drivers/net/softnic/rte_eth_softnic.c (0 hunks)
  • drivers/net/txgbe/txgbe_rxtx.c (1 hunks)
  • examples/ip_reassembly/main.c (1 hunks)
  • examples/l3fwd-power/main.c (4 hunks)
  • examples/l3fwd/l3fwd.h (2 hunks)
  • examples/l3fwd/l3fwd_acl.c (1 hunks)
  • examples/l3fwd/l3fwd_common.h (2 hunks)
  • examples/l3fwd/l3fwd_em.c (1 hunks)
  • examples/l3fwd/l3fwd_fib.c (1 hunks)
  • examples/l3fwd/l3fwd_lpm.c (1 hunks)
  • examples/l3fwd/main.c (15 hunks)
  • examples/meson.build (1 hunks)
  • examples/server_node_efd/efd_server/main.c (1 hunks)
  • examples/server_node_efd/shared/common.h (1 hunks)
  • examples/vdpa/main.c (3 hunks)
💤 Files with no reviewable changes (2)
  • drivers/net/ntnic/ntnic_ethdev.c
  • drivers/net/softnic/rte_eth_softnic.c
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Sourcery review
🔇 Additional comments (44)
doc/guides/freebsd_gsg/build_dpdk.rst (2)

19-19: Package version update is correct.

The change from py38-pyelftools to py311-pyelftools properly reflects the Python 3.11 requirement and aligns with the updated note.


28-28: Installation command update is consistent.

The command correctly reflects the updated py311-pyelftools package name and aligns with the prerequisite list changes.

drivers/event/cnxk/cn20k_eventdev.c (3)

195-195: LGTM! Offload flags correctly applied during event flush.

The change from a static 0 to dev->rx_offloads ensures that work retrieval during queue flush respects the device's configured RX offload flags. This prevents incorrect packet processing during flush operations.


524-524: LGTM! Offload flags correctly applied during port quiesce.

Using dev->rx_offloads instead of a static 0 ensures that pending work extraction during port quiesce operations respects the device's configured RX offload flags.


550-550: LGTM! Offload flags correctly applied for prefetch queue work.

The change ensures that work extraction from the prefetch queue (PRF_WQE0) also respects the device's configured RX offload flags, maintaining consistency across all work retrieval paths.

drivers/event/cnxk/cn10k_eventdev.c (3)

129-129: LGTM! Offload flags correctly applied during event flush.

The change from a static maximum offload mask to dev->rx_offloads ensures that work retrieval during queue flush uses only the device's actually configured RX offload flags, preventing unnecessary processing overhead and potential incorrect behavior.


475-475: LGTM! Offload flags correctly applied during port quiesce.

Using dev->rx_offloads instead of a static mask ensures that pending work extraction during port quiesce operations correctly applies only the device's configured RX offload flags.


504-504: LGTM! Offload flags correctly applied for prefetch queue work.

The change ensures that work extraction from the prefetch queue (PRF_WQE0) respects the device's configured RX offload flags, completing the consistent offload handling across all work retrieval paths in both cn10k and cn20k drivers.

drivers/event/cnxk/cn20k_worker.h (1)

57-59: LGTM! Defensive initialization improves code safety.

The explicit initialization of meta_aura, laddr, lmt_id, and d_off to zero is good defensive programming practice. While the existing logic ensures these variables are set before use within their respective code paths (security offload blocks), the initializations eliminate any risk of undefined behavior and improve code clarity.

drivers/event/cnxk/cn10k_worker.h (1)

55-58: LGTM! Consistent defensive initialization.

The initialization of meta_aura, laddr, lmt_id, d_off to zero and mp to NULL follows the same defensive programming pattern as the cn20k implementation. Initializing the pointer mp to NULL is particularly important for preventing potential null pointer dereferences. These changes improve code safety without altering functionality.

examples/server_node_efd/shared/common.h (1)

61-63: Perfect. Now I have a complete understanding of the code. Let me generate the final rewritten review comment:


Using RTE_RING_NAMESIZE is correct and properly defined at compile time.

The refactor to use RTE_RING_NAMESIZE instead of a calculated buffer size is good practice. Verification confirms that all translation units that actually instantiate get_rx_queue_name() (main.c, node.c, init.c) include <rte_ring.h> before including common.h, ensuring RTE_RING_NAMESIZE is defined when needed. The inline function pattern isolates the constant dependency to actual call sites, and files like args.c that include common.h without using the function are unaffected. No changes required.

examples/vdpa/main.c (3)

25-25: Buffer overflow prevention fix is correct.

The reduction in iface buffer size correctly accounts for the space needed when concatenating with devcnt at line 501. The calculation MAX_PATH_LEN - MAX_VDPA_STR_LEN (128 - 5 = 123 bytes) ensures that iface (max 122 chars) plus the maximum devcnt value "1023" (4 chars) plus null terminator fits within the 128-byte ifname destination.

Also applies to: 40-40


78-78: Correct fix: use strcmp for option name comparison.

Replacing strncmp with strcmp is appropriate for comparing the exact option name. Using MAX_PATH_LEN as the comparison length was incorrect since long_option[idx].name is the option string "iface", not a path.


79-79: Correct use of sizeof(iface) for buffer safety.

Using sizeof(iface) instead of the hardcoded MAX_PATH_LEN correctly reflects the actual buffer size and improves maintainability.

drivers/net/cnxk/cn20k_rx.h (1)

304-312: Zero-initializing fsz_w1 / cq_w5 removes undefined-value risk

Initializing fsz_w1 and cq_w5 to 0 is safe (they are still overwritten on the active paths) and prevents any potential use of indeterminate values if control flow changes later. No behavioral change, just safer defaults.

drivers/net/cnxk/cn10k_rx.h (2)

568-578: Initialize inb_priv defensively in nix_sec_meta_to_mbuf

Setting inb_priv = NULL at declaration is a safe defensive change; actual uses still occur only when inb_sa is valid, but this removes any chance of reading an indeterminate pointer if logic is extended later.


1463-1472: Vector Rx security-path locals now initialized to known values

The zero‑initialization of lmt_id, d_off, lbase, and laddr is harmless (they are assigned before use when security offload is enabled) and resolves potential compiler warnings about uninitialized reads. No behavior change from previous logic.

drivers/net/ngbe/ngbe_rxtx.c (1)

1918-1945: Use dummy tx_pkt_prepare in simple Tx path for consistent API surface

Assigning dev->tx_pkt_prepare = rte_eth_tx_pkt_prepare_dummy in the simple (no‑offload) path keeps the driver’s tx_pkt_prepare callback valid in all modes and matches the pattern in other PMDs; behavior remains a no‑op for simple Tx.

If you want to double‑check against your DPDK version, please confirm that rte_eth_tx_pkt_prepare_dummy is the recommended placeholder for PMDs that don’t need per‑packet prep in the simple path.

drivers/net/txgbe/txgbe_rxtx.c (1)

2341-2350: Simple TX path now exposes a safe, non-NULL tx_pkt_prepare callback

Setting dev->tx_pkt_prepare = rte_eth_tx_pkt_prepare_dummy in the simple path aligns this PMD with the full-featured path and other drivers: callers can always rely on a valid prepare callback, and using the dummy implementation is correct when offloads are disabled in this path.

drivers/net/hns3/hns3_rxtx.c (2)

4558-4565: Non-started / reset path now uses dummy tx_pkt_prepare instead of NULL

Using rte_eth_tx_pkt_prepare_dummy when the device is not started (and TX is already routed to rte_eth_pkt_burst_dummy) keeps tx_pkt_prepare non-NULL and consistent with the started path behavior, without changing effective datapath behavior.


4917-4922: Stopping TX datapath now also clears tx_pkt_prepare to the dummy helper

When TX is stopped, both tx_pkt_burst and tx_pkt_prepare are now set to their dummy implementations, which avoids dangling or NULL callbacks on both primary and secondary processes and matches how hns3_set_rxtx_function() initializes these hooks.

drivers/common/mlx5/mlx5_devx_cmds.c (2)

787-788: LGTM! Field initialization added correctly.

The initialization of header_length_field_offset_mode from the input data structure is properly integrated into the flex parser creation command.


916-917: LGTM! Hardware capability query correctly derives workaround flag.

The derivation of header_length_field_mode_wa as the negation of the hardware's header_length_field_offset_mode capability is logically consistent with how it's used throughout the codebase. This correctly identifies hardware that requires the workaround.

drivers/net/mlx5/mlx5_flow_flex.c (1)

557-570: Based on my verification, I have a complete picture of how this feature is implemented. The concerns raised in the original review are actually already addressed in the codebase.

No backward compatibility issues found. The gating condition is properly designed.

The header_length_field_mode_wa flag is:

  1. Automatically initialized from hardware capabilities (mlx5_devx_cmds.c:916):

    • Set to !MLX5_GET(parse_graph_node_cap, hcattr, header_length_field_offset_mode)
    • Queries the device and inverts the offset_mode bit
    • Applies to all hardware versions that report parse_graph capabilities
  2. Firmware-dependent (as documented in mlx5.c:1084):

    • true for legacy firmware before ConnectX-8 → uses workaround logic
    • false for new firmware (ConnectX-8+) → skips workaround, uses native offset_mode support
  3. Intentionally dual-pathed:

    • Both code paths are maintained and explicitly handled
    • No breaking changes—older hardware still gets the workaround, newer hardware uses native support
    • This is a well-designed compatibility solution, not a regression

The code already has clear comments explaining the workaround and when it applies. No additional initialization checks or comments are needed.

drivers/net/mlx5/mlx5.c (2)

1083-1091: SRH flex parser header-length offset gating looks correct

The split between legacy header_length_field_mode_wa handling and the direct offset path for new firmware is clear and keeps the existing WA logic intact while simplifying the non-WA case. No functional issues spotted in the offset computation.


1494-1497: Default dv_flow_en=1 and allow_duplicate_pattern=1 behavior

The new defaults (enable DV flow steering and allow duplicate pattern by default, with later capability-based downgrading) are consistent with the updated documentation and existing capability checks (sh->dev_cap.dv_flow_en, dev_cap.dv_esw_en). This looks fine from a behavior and compatibility standpoint.

doc/guides/nics/mlx5.rst (2)

699-701: Defaults for dv_flow_en and allow_duplicate_pattern are clearly documented and match code

Documenting that dv_flow_en defaults to 1 (DV steering) when supported and 0 otherwise, and that allow_duplicate_pattern defaults to 1, aligns with the implementation in mlx5_shared_dev_ctx_args_config(). This makes the behavioral change explicit for users relying on implicit defaults.

Also applies to: 836-837


650-651: HWS + synchronous flow API limitations and requirements are well captured; please double‑check version details

The new notes tying together HWS behavior with the synchronous API (tunnel-offload restriction in dv_xmeta_en=3, need to call rte_flow_configure() before async flows, match-field size limits vs SWS, update semantics, default rte_flow_port_attr/queue/action allocation, partial-mask behavior, representor/transfer constraints, MARK vs META support, GRE c_rsvd0_ver limitation in group 0, and COUNT/AGE support on root tables plus their minimum kernel/rdma-core/DOCA versions) give a much clearer picture of what applications can rely on when dv_flow_en=2.

From a docs perspective this is coherent and consistent with the rest of the guide; I don’t see contradictions with the described flow engines. Given the explicit external version constraints for COUNT/AGE-on-root support, it would be good to re-verify those minimum kernel/rdma-core/DOCA numbers against the current releases before merging.

Also applies to: 1366-1372, 1410-1444, 2396-2403, 2593-2596, 2754-2763, 2813-2823, 3817-3821

drivers/common/mlx5/mlx5_prm.h (3)

1600-1602: Steering logic format macros look consistent and non-breaking

Switching to #define MLX5_STEERING_LOGIC_FORMAT_* constants with values 0x0 and 0x1 matches the 4‑bit steering_format_version field and should be ABI‑safe; no issues from this header’s perspective.


2351-2357: Expanded reserved_at_0 in ESW flow table caps should be double‑checked against PRM

Widening reserved_at_0 to [0x800] in mlx5_ifc_flow_table_esw_cap_bits shifts subsequent fields but keeps the struct internally consistent. Assuming this matches the updated PRM layout, it looks fine; just ensure any code that relies on hard‑coded offsets into this capability block has been aligned with the new definition.


4979-4999: Flex‑parser header length offset mode bit is structurally correct

Introducing header_length_field_offset_mode[0x1] by splitting the previous 3‑bit reserved_at_178 into reserved_at_178[0x1], the new mode bit, and reserved_at_17a[0x1] preserves total width and maintains the rest of mlx5_ifc_parse_graph_flex_bits unchanged; layout remains compatible while exposing the new feature.

examples/l3fwd-power/main.c (1)

1490-1507: Help text for --eth-link-speed is consistent and clear

The new usage line documents the option name and behavior consistently with the macro and parser. No issues here.

examples/l3fwd/main.c (4)

57-62: Compile-time cache/burst relationship and separate RX/TX burst globals look good

The static_assert correctly enforces MEMPOOL_CACHE_SIZE >= MAX_PKT_BURST, and the new rx_burst_size / tx_burst_size globals are sensibly defaulted to DEFAULT_PKT_BURST for later tuning. No functional issues here.


404-405: CLI help text matches new options and format arguments are consistent

The added --rx-burst, --tx-burst, and --eth-link-speed usage lines align with the implemented options, and the additional %d placeholders for RX/TX burst defaults are correctly wired to the two DEFAULT_PKT_BURST arguments. This keeps the help output in sync with the behavior.

Also applies to: 428-429, 433-435, 468-469


762-763: New long-option constants and lgopts wiring are coherent

CMD_LINK_OPT_ETH_LINK_SPEED, CMD_LINE_OPT_PKT_RX_BURST, and CMD_LINE_OPT_PKT_TX_BURST are correctly added to the enum range, and lgopts[] entries map them to the right numeric codes. This keeps getopt handling centralized and avoids collisions with existing options.

Also applies to: 784-785, 795-796, 817-818, 822-825, 847-848


1690-1691: Burst-size logging is a useful addition

Logging rx_burst_size and tx_burst_size after argument parsing provides clear visibility into the effective burst settings (including any PMD‑driven RX adjustment) at startup, which should help debugging and benchmarking runs.

VERSION (1)

1-1: Version bump to 25.11.0-rc4 looks consistent.

Single-source version string update, in line with the 25.11 release docs in this PR and with no behavioral impact.

doc/guides/cryptodevs/ionic.rst (1)

2-20: Ionic crypto model list and copyright update look good.

The new Pollara 400 entry matches the existing bullet/list formatting and link style, and the extended 2021‑2025 copyright range is consistent with current year coverage.

examples/meson.build (1)

81-83: Resetting default_cflags to machine_args is reasonable; watch for new warnings.

Removing any extra flags (such as -Wno-format-truncation if that was present before) will re-expose compiler diagnostics in example builds. This is fine as long as all examples build cleanly across supported compilers with your warning/error policy.

If not already done, please ensure -Dexamples=all builds pass on at least GCC and Clang with your default warning settings.

doc/guides/nics/i40e.rst (1)

107-142: 25.11 i40e kernel/FW mapping entries are consistent.

The added 25.11 rows follow the existing table format, keep the version ordering intact, and match the driver/firmware combinations documented in the 25.11 Tested Platforms section of the release notes.

doc/guides/nics/ice.rst (1)

90-101: New 25.11 ICE compatibility rows look correct.

The added 25.11 mappings for E810 and E830 maintain table ordering and are consistent with the DDP and firmware versions listed for those SKUs in the 25.11 release notes.

doc/guides/nics/ionic.rst (2)

2-2: LGTM!

The copyright year update is appropriate for the 2025 release.


18-19: The Pollara 400 entry is properly formatted and consistent with existing entries, but external URL verification cannot be completed in the sandbox environment.

The new entry at lines 18-19 follows the exact same formatting pattern as the other AMD Pensando product briefs (Elba at line 15 and DSC3-400 at line 17). The reStructuredText syntax is correct. However, due to sandbox network restrictions, I cannot verify that the PDF URL is actually accessible. This requires manual verification by visiting the URL directly or testing from an environment with unrestricted internet access.

The URL structure follows the same domain and path pattern as the other working product brief links, which is a positive indicator.

doc/api/meson.build (1)

30-30: LGTM! Consistent documentation tagging.

The addition of install_tag: 'doc' to all three documentation targets (examples.dox, doxygen-html, doxygen-man) is consistent and follows the same pattern as the changes in doc/guides/meson.build. This enables unified selective installation of documentation artifacts.

Note: As mentioned in the review for doc/guides/meson.build, please verify that the project's minimum Meson version is 0.60.0 or later to support the install_tag parameter.

Also applies to: 80-80, 95-95

Comment on lines +21 to +24
.. note::

The specific package for pyelftools is dependent on the version of python in use,
Python 3.8 being the version at type of writing, hence the ``py38`` prefix.
The specific package for pyelftools is dependent on the version of python in use,
Python 3.11 being the version at type of writing, hence the ``py311`` prefix.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix typo in documentation note.

Line 24 contains a grammatical error: "at type of writing" should be "at time of writing".

Apply this diff to fix the typo:

    The specific package for pyelftools is dependent on the version of python in use,
-   Python 3.11 being the version at type of writing, hence the ``py311`` prefix.
+   Python 3.11 being the version at time of writing, hence the ``py311`` prefix.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
.. note::
The specific package for pyelftools is dependent on the version of python in use,
Python 3.8 being the version at type of writing, hence the ``py38`` prefix.
The specific package for pyelftools is dependent on the version of python in use,
Python 3.11 being the version at type of writing, hence the ``py311`` prefix.
.. note::
The specific package for pyelftools is dependent on the version of python in use,
Python 3.11 being the version at time of writing, hence the ``py311`` prefix.
🤖 Prompt for AI Agents
In doc/guides/freebsd_gsg/build_dpdk.rst around lines 21 to 24, the
documentation note contains a typo: replace the phrase "at type of writing" with
"at time of writing" so the sentence reads that Python 3.11 was the version at
time of writing; update the text accordingly.

depfile: '.html.d',
build_by_default: get_option('enable_docs'),
install: get_option('enable_docs'),
install_tag: 'doc',
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

Script executed:

#!/bin/bash
# Check minimum required Meson version in the project
echo "=== Searching for Meson version requirements ==="
rg -n "meson_version|project\(" --type python meson.build | head -30

Repository: ovsrobot/dpdk


<shell_result>
Repository: ovsrobot/dpdk
Script execution failed with error: Request timed out after 120000ms (requestId=e5d6d7a5-90f0-42c0-9fe9-9d1be4198559)
</shell_result>


Script executed:

#!/bin/bash
# Check the root meson.build for version requirements
echo "=== Checking root meson.build ==="
head -50 meson.build 2>/dev/null || echo "Root meson.build not found"

# Also check if there's version info in the doc/guides directory
echo ""
echo "=== Checking doc/guides/meson.build ==="
head -30 doc/guides/meson.build 2>/dev/null || echo "File not found"

Repository: ovsrobot/dpdk


<shell_result>
Repository: ovsrobot/dpdk
Exit code: 0

stdout:

=== Checking root meson.build ===
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017-2019 Intel Corporation

project('DPDK', 'c',
        version: files('VERSION'),
        license: 'BSD',
        default_options: [
            'buildtype=release',
            'c_std=c11',
            'default_library=static',
            'warning_level=2',
        ],
        meson_version: '>= 0.57.2'
        # meson_version_windows: '>= 1.5.2'
)

fs = import('fs')

# check for developer mode
developer_mode = false
if get_option('developer_mode').auto()
    developer_mode = fs.exists('.git')
else
    developer_mode = get_option('developer_mode').enabled()
endif
if developer_mode
    message('## Building in Developer Mode ##')
endif

# set up some global vars for compiler, platform, configuration, etc.
cc = meson.get_compiler('c')
dpdk_source_root = meson.current_source_dir()
dpdk_build_root = meson.current_build_dir()
dpdk_conf = configuration_data()
dpdk_includes = []
dpdk_libraries = []
dpdk_static_libraries = []
dpdk_shared_lib_deps = []
dpdk_static_lib_deps = []
dpdk_arch_headers = []
dpdk_arch_indirect_headers = []
dpdk_generic_headers = []
dpdk_headers = []
dpdk_indirect_headers = []
dpdk_drivers_headers = []
dpdk_driver_classes = []
dpdk_drivers = []
dpdk_extra_ldflags = []
dpdk_libs_deprecated = []
dpdk_apps_disabled = []

=== Checking doc/guides/meson.build ===
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2018 Intel Corporation

sphinx = find_program('sphinx-build', required: get_option('enable_docs'))

if not sphinx.found()
    subdir_done()
endif

extra_sphinx_args = ['-a']
if get_option('werror')
    extra_sphinx_args += '-W'
endif

htmldir = join_paths(get_option('datadir'), 'doc', 'dpdk', 'guides')
html_guides = custom_target('html_guides',
        input: files('index.rst'),
        output: 'html',
        command: [sphinx_wrapper, sphinx, meson.project_version(),
            meson.current_source_dir(), meson.current_build_dir(),
            extra_sphinx_args],
        depfile: '.html.d',
        build_by_default: get_option('enable_docs'),
        install: get_option('enable_docs'),
        install_tag: 'doc',
        install_dir: htmldir)

doc_targets += html_guides
doc_target_names += 'HTML_Guides'

</shell_result>


Based on my verification, I've found a compatibility issue with the added install_tag parameter.

The project's root meson.build specifies meson_version: '>= 0.57.2', but the install_tag parameter requires Meson 0.60.0 or later. The minimum version requirement (0.57.2) does not meet the feature requirement (0.60.0).


Update minimum Meson version requirement to support install_tag parameter.

The addition of install_tag: 'doc' requires Meson version 0.60.0 or later. The project's current minimum version is 0.57.2. Either update the minimum Meson version in meson.build to >= 0.60.0, or remove the install_tag parameter from the custom_target.

🤖 Prompt for AI Agents
In doc/guides/meson.build around line 25, the custom_target uses install_tag
which requires Meson >= 0.60.0 while the project declares meson_version: '>=
0.57.2'; update the meson_version in the root meson.build to '>= 0.60.0' to
match the new feature, or alternatively remove the install_tag: 'doc' parameter
from this custom_target so it remains compatible with the existing minimum
version.

Comment on lines +349 to +600
* Intel\ |reg| platforms with Intel\ |reg| NICs combinations

* CPU

* Intel\ |reg| Atom\ |trade| x7835RE
* Intel\ |reg| Xeon\ |reg| 6553P-B CPU @ 2.6GHz
* Intel\ |reg| Xeon\ |reg| 6767P CPU @ 2.4GHz
* Intel\ |reg| Xeon\ |reg| CPU Max 9480
* Intel\ |reg| Xeon\ |reg| CPU Max 9480 CPU @ 1.9GHz
* Intel\ |reg| Xeon\ |reg| Gold 6330 CPU @ 2.00GHz
* Intel\ |reg| Xeon\ |reg| Gold 6348 CPU @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8280M CPU @ 2.70GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8380 CPU @ 2.30GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8468H CPU @ 2.1GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8490H CPU @ 1.9GHz

* OS:

* Fedora 42
* FreeBSD 14.3
* Microsoft Azure Linux 3.0
* OpenAnolis OS 8.10
* openEuler 24.03 (LTS-SP2)
* Red Hat Enterprise Linux Server release 10
* Red Hat Enterprise Linux Server release 9.6
* Ubuntu 24.04 LTS
* Ubuntu 24.04.3 LTS
* Vmware ESXi 8.0.3

* NICs:

* Intel\ |reg| Ethernet Controller E810-C for SFP (4x25G)

* Firmware version: 4.90 0x80020eeb 1.3863.0
* Device ID (PF/VF): 8086:1593 / 8086:1889
* Driver version (out-of-tree): 2.3.14 (ice)
* Driver version (in-tree): 6.8.0-86-generic (Ubuntu24.04 LTS) (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0

* Intel\ |reg| Ethernet Controller E810-C for QSFP (2x100G)

* Firmware version: 4.90 0x80020ef2 1.3863.0
* Device ID (PF/VF): 8086:1592 / 8086:1889
* Driver version (out-of-tree): 2.3.14 (ice)
* Driver version (in-tree): 6.6.12.1-1.azl3+ice+ (Microsoft Azure Linux 3.0) /
6.12.0-55.9.1.el10_0.x86_64+rt (RHEL10) (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0

* Intel\ |reg| Ethernet Controller E830-CC for SFP

* Firmware version: 1.20 0x800179c0 1.3862.0
* Device ID (PF/VF): 8086:12d3 / 8086:1889
* Driver version: 2.3.14 (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0

* Intel\ |reg| Ethernet Controller E830-CC for QSFP

* Firmware version: 1.20 0x800179c1 1.3862.0
* Device ID (PF/VF): 8086:12d2 / 8086:1889
* Driver version: 2.3.14 (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0

* Intel\ |reg| Ethernet Connection E825-C for QSFP

* Firmware version: 4.04 0x80007e5c 1.3885.0
* Device ID (PF/VF): 8086:579d / 8086:1889
* Driver version: 2.3.14 (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0

* Intel\ |reg| Ethernet Network Adapter E610-XT2

* Firmware version: 1.30 0x8000e8a2 1.3864.0
* Device ID (PF/VF): 8086:57b0 / 8086:57ad
* Driver version (out-of-tree): 6.2.5 (ixgbe)

* Intel\ |reg| Ethernet Network Adapter E610-XT4

* Firmware version: 1.30 0x8000e8a5 1.3864.0
* Device ID (PF/VF): 8086:57b0 / 8086:57ad
* Driver version (out-of-tree): 6.2.5 (ixgbe)

* Intel\ |reg| Ethernet Converged Network Adapter X710-DA4 (4x10G)

* Firmware version: 9.55 0x8000fdf4 1.3862.0
* Device ID (PF/VF): 8086:1572 / 8086:154c
* Driver version (in-tree): 6.8.0-88-generic (i40e)

* Intel\ |reg| Corporation Ethernet Connection X722 for 10GbE SFP+ (2x10G)

* Firmware version: 6.51 0x80004430 1.3862.0
* Device ID (PF/VF): 8086:37d0 / 8086:37cd
* Driver version (out-of-tree): 2.28.13 (i40e)

* Intel\ |reg| Ethernet Converged Network Adapter XXV710-DA2 (2x25G)

* Firmware version: 9.55 0x8000fe4c 1.3862.0
* Device ID (PF/VF): 8086:158b / 8086:154c
* Driver version (out-of-tree): 2.28.13 (i40e)
* Driver version (in-tree): 6.8.0-88-generic (Ubuntu24.04.3 LTS) /
6.12.0-55.9.1.el10_0.x86_64 (RHEL10) (i40e)

* Intel\ |reg| Ethernet Converged Network Adapter XL710-QDA2 (2X40G)

* Firmware version(PF): 9.55 0x8000fe31 1.3862.0
* Device ID (PF/VF): 8086:1583 / 8086:154c
* Driver version (out-of-tree): 2.28.13 (i40e)

* Intel\ |reg| Ethernet Controller I226-LM

* Firmware version: 2.14, 0x8000028c
* Device ID (PF): 8086:125b
* Driver version (in-tree): 6.8.0-87-generic (Ubuntu24.04.3 LTS) (igc)

* Intel\ |reg| Corporation Ethernet Server Adapter I350-T4

* Firmware version: 1.63, 0x8000116b
* Device ID (PF/VF): 8086:1521 /8086:1520
* Driver version: 6.14.0-35-generic (Ubuntu 24.04.3 LTS) (igb)

* Intel\ |reg| Infrastructure Processing Unit (Intel\ |reg| IPU) E2100

* Firmware version: ci-ts.release.2.0.0.11126
* Device ID (idpf/cpfl): 8086:1452/8086:1453
* Driver version: 0.0.772 (idpf)

* Intel\ |reg| platforms with NVIDIA\ |reg| NICs combinations

* CPU:

* Intel\ |reg| Xeon\ |reg| Gold 6154 CPU @ 3.00GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2697A v4 @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2697 v3 @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2680 v2 @ 2.80GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2670 0 @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2650 v4 @ 2.20GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2650 v3 @ 2.30GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2640 @ 2.50GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2650 0 @ 2.00GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2620 v4 @ 2.10GHz

* OS:

* Red Hat Enterprise Linux release 9.2 (Plow)
* Red Hat Enterprise Linux release 9.1 (Plow)
* Red Hat Enterprise Linux release 8.6 (Ootpa)
* Ubuntu 24.04
* Ubuntu 22.04
* Ubuntu 20.04
* SUSE Enterprise Linux 15 SP4

* DOCA:

* DOCA 3.2.0-125000 and above.

* upstream kernel:

* Linux 6.17.0 and above

* rdma-core:

* rdma-core-58.0 and above

* NICs

* NVIDIA\ |reg| ConnectX\ |reg|-6 Dx EN 100G MCX623106AN-CDAT (2x100G)

* Host interface: PCI Express 4.0 x16
* Device ID: 15b3:101d
* Firmware version: 22.47.1026 and above

* NVIDIA\ |reg| ConnectX\ |reg|-6 Lx EN 25G MCX631102AN-ADAT (2x25G)

* Host interface: PCI Express 4.0 x8
* Device ID: 15b3:101f
* Firmware version: 26.47.1026 and above

* NVIDIA\ |reg| ConnectX\ |reg|-7 200G CX713106AE-HEA_QP1_Ax (2x200G)

* Host interface: PCI Express 5.0 x16
* Device ID: 15b3:1021
* Firmware version: 28.47.1026 and above

* NVIDIA\ |reg| ConnectX\ |reg|-8 SuperNIC 400G MT4131 - 900-9X81Q-00CN-STA (2x400G)

* Host interface: PCI Express 6.0 x16
* Device ID: 15b3:1023
* Firmware version: 40.47.1026 and above

* NVIDIA\ |reg| ConnectX\ |reg|-9 SuperNIC 800G MT4133 - 900-9X91E-00EB-STA_Ax (1x800G)

* Host interface: PCI Express 6.0 x16
* Device ID: 15b3:1025
* Firmware version: 82.47.0366 and above

* NVIDIA\ |reg| BlueField\ |reg| SmartNIC

* NVIDIA\ |reg| BlueField\ |reg|-2 SmartNIC MT41686 - MBF2H332A-AEEOT_A1 (2x25G)

* Host interface: PCI Express 3.0 x16
* Device ID: 15b3:a2d6
* Firmware version: 24.47.1026 and above

* NVIDIA\ |reg| BlueField\ |reg|-3 P-Series DPU MT41692 - 900-9D3B6-00CV-AAB (2x200G)

* Host interface: PCI Express 5.0 x16
* Device ID: 15b3:a2dc
* Firmware version: 32.47.1026 and above

* Embedded software:

* Ubuntu 24.04
* MLNX_OFED 25.10-1.2.8.0
* bf-bundle-3.2.0-113_25.10_ubuntu-24.04
* DPDK application running on ARM cores

* IBM Power 9 platforms with NVIDIA\ |reg| NICs combinations

* CPU:

* POWER9 2.2 (pvr 004e 1202)

* OS:

* Ubuntu 20.04

* NICs:

* NVIDIA\ |reg| ConnectX\ |reg|-6 Dx 100G MCX623106AN-CDAT (2x100G)

* Host interface: PCI Express 4.0 x16
* Device ID: 15b3:101d
* Firmware version: 22.47.1026 and above

* NVIDIA\ |reg| ConnectX\ |reg|-7 200G CX713106AE-HEA_QP1_Ax (2x200G)

* Host interface: PCI Express 5.0 x16
* Device ID: 15b3:1021
* Firmware version: 28.47.1026 and above

* DOCA:

* DOCA 3.2.0-125000 and above
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix minor typo in Tested Platforms OS list.

Spelling of VMware is off in the OS list.

Suggested diff:

-    * Vmware ESXi 8.0.3
+    * VMware ESXi 8.0.3
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
* Intel\ |reg| platforms with Intel\ |reg| NICs combinations
* CPU
* Intel\ |reg| Atom\ |trade| x7835RE
* Intel\ |reg| Xeon\ |reg| 6553P-B CPU @ 2.6GHz
* Intel\ |reg| Xeon\ |reg| 6767P CPU @ 2.4GHz
* Intel\ |reg| Xeon\ |reg| CPU Max 9480
* Intel\ |reg| Xeon\ |reg| CPU Max 9480 CPU @ 1.9GHz
* Intel\ |reg| Xeon\ |reg| Gold 6330 CPU @ 2.00GHz
* Intel\ |reg| Xeon\ |reg| Gold 6348 CPU @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8280M CPU @ 2.70GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8380 CPU @ 2.30GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8468H CPU @ 2.1GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8490H CPU @ 1.9GHz
* OS:
* Fedora 42
* FreeBSD 14.3
* Microsoft Azure Linux 3.0
* OpenAnolis OS 8.10
* openEuler 24.03 (LTS-SP2)
* Red Hat Enterprise Linux Server release 10
* Red Hat Enterprise Linux Server release 9.6
* Ubuntu 24.04 LTS
* Ubuntu 24.04.3 LTS
* Vmware ESXi 8.0.3
* NICs:
* Intel\ |reg| Ethernet Controller E810-C for SFP (4x25G)
* Firmware version: 4.90 0x80020eeb 1.3863.0
* Device ID (PF/VF): 8086:1593 / 8086:1889
* Driver version (out-of-tree): 2.3.14 (ice)
* Driver version (in-tree): 6.8.0-86-generic (Ubuntu24.04 LTS) (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0
* Intel\ |reg| Ethernet Controller E810-C for QSFP (2x100G)
* Firmware version: 4.90 0x80020ef2 1.3863.0
* Device ID (PF/VF): 8086:1592 / 8086:1889
* Driver version (out-of-tree): 2.3.14 (ice)
* Driver version (in-tree): 6.6.12.1-1.azl3+ice+ (Microsoft Azure Linux 3.0) /
6.12.0-55.9.1.el10_0.x86_64+rt (RHEL10) (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0
* Intel\ |reg| Ethernet Controller E830-CC for SFP
* Firmware version: 1.20 0x800179c0 1.3862.0
* Device ID (PF/VF): 8086:12d3 / 8086:1889
* Driver version: 2.3.14 (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0
* Intel\ |reg| Ethernet Controller E830-CC for QSFP
* Firmware version: 1.20 0x800179c1 1.3862.0
* Device ID (PF/VF): 8086:12d2 / 8086:1889
* Driver version: 2.3.14 (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0
* Intel\ |reg| Ethernet Connection E825-C for QSFP
* Firmware version: 4.04 0x80007e5c 1.3885.0
* Device ID (PF/VF): 8086:579d / 8086:1889
* Driver version: 2.3.14 (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0
* Intel\ |reg| Ethernet Network Adapter E610-XT2
* Firmware version: 1.30 0x8000e8a2 1.3864.0
* Device ID (PF/VF): 8086:57b0 / 8086:57ad
* Driver version (out-of-tree): 6.2.5 (ixgbe)
* Intel\ |reg| Ethernet Network Adapter E610-XT4
* Firmware version: 1.30 0x8000e8a5 1.3864.0
* Device ID (PF/VF): 8086:57b0 / 8086:57ad
* Driver version (out-of-tree): 6.2.5 (ixgbe)
* Intel\ |reg| Ethernet Converged Network Adapter X710-DA4 (4x10G)
* Firmware version: 9.55 0x8000fdf4 1.3862.0
* Device ID (PF/VF): 8086:1572 / 8086:154c
* Driver version (in-tree): 6.8.0-88-generic (i40e)
* Intel\ |reg| Corporation Ethernet Connection X722 for 10GbE SFP+ (2x10G)
* Firmware version: 6.51 0x80004430 1.3862.0
* Device ID (PF/VF): 8086:37d0 / 8086:37cd
* Driver version (out-of-tree): 2.28.13 (i40e)
* Intel\ |reg| Ethernet Converged Network Adapter XXV710-DA2 (2x25G)
* Firmware version: 9.55 0x8000fe4c 1.3862.0
* Device ID (PF/VF): 8086:158b / 8086:154c
* Driver version (out-of-tree): 2.28.13 (i40e)
* Driver version (in-tree): 6.8.0-88-generic (Ubuntu24.04.3 LTS) /
6.12.0-55.9.1.el10_0.x86_64 (RHEL10) (i40e)
* Intel\ |reg| Ethernet Converged Network Adapter XL710-QDA2 (2X40G)
* Firmware version(PF): 9.55 0x8000fe31 1.3862.0
* Device ID (PF/VF): 8086:1583 / 8086:154c
* Driver version (out-of-tree): 2.28.13 (i40e)
* Intel\ |reg| Ethernet Controller I226-LM
* Firmware version: 2.14, 0x8000028c
* Device ID (PF): 8086:125b
* Driver version (in-tree): 6.8.0-87-generic (Ubuntu24.04.3 LTS) (igc)
* Intel\ |reg| Corporation Ethernet Server Adapter I350-T4
* Firmware version: 1.63, 0x8000116b
* Device ID (PF/VF): 8086:1521 /8086:1520
* Driver version: 6.14.0-35-generic (Ubuntu 24.04.3 LTS) (igb)
* Intel\ |reg| Infrastructure Processing Unit (Intel\ |reg| IPU) E2100
* Firmware version: ci-ts.release.2.0.0.11126
* Device ID (idpf/cpfl): 8086:1452/8086:1453
* Driver version: 0.0.772 (idpf)
* Intel\ |reg| platforms with NVIDIA\ |reg| NICs combinations
* CPU:
* Intel\ |reg| Xeon\ |reg| Gold 6154 CPU @ 3.00GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2697A v4 @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2697 v3 @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2680 v2 @ 2.80GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2670 0 @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2650 v4 @ 2.20GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2650 v3 @ 2.30GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2640 @ 2.50GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2650 0 @ 2.00GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2620 v4 @ 2.10GHz
* OS:
* Red Hat Enterprise Linux release 9.2 (Plow)
* Red Hat Enterprise Linux release 9.1 (Plow)
* Red Hat Enterprise Linux release 8.6 (Ootpa)
* Ubuntu 24.04
* Ubuntu 22.04
* Ubuntu 20.04
* SUSE Enterprise Linux 15 SP4
* DOCA:
* DOCA 3.2.0-125000 and above.
* upstream kernel:
* Linux 6.17.0 and above
* rdma-core:
* rdma-core-58.0 and above
* NICs
* NVIDIA\ |reg| ConnectX\ |reg|-6 Dx EN 100G MCX623106AN-CDAT (2x100G)
* Host interface: PCI Express 4.0 x16
* Device ID: 15b3:101d
* Firmware version: 22.47.1026 and above
* NVIDIA\ |reg| ConnectX\ |reg|-6 Lx EN 25G MCX631102AN-ADAT (2x25G)
* Host interface: PCI Express 4.0 x8
* Device ID: 15b3:101f
* Firmware version: 26.47.1026 and above
* NVIDIA\ |reg| ConnectX\ |reg|-7 200G CX713106AE-HEA_QP1_Ax (2x200G)
* Host interface: PCI Express 5.0 x16
* Device ID: 15b3:1021
* Firmware version: 28.47.1026 and above
* NVIDIA\ |reg| ConnectX\ |reg|-8 SuperNIC 400G MT4131 - 900-9X81Q-00CN-STA (2x400G)
* Host interface: PCI Express 6.0 x16
* Device ID: 15b3:1023
* Firmware version: 40.47.1026 and above
* NVIDIA\ |reg| ConnectX\ |reg|-9 SuperNIC 800G MT4133 - 900-9X91E-00EB-STA_Ax (1x800G)
* Host interface: PCI Express 6.0 x16
* Device ID: 15b3:1025
* Firmware version: 82.47.0366 and above
* NVIDIA\ |reg| BlueField\ |reg| SmartNIC
* NVIDIA\ |reg| BlueField\ |reg|-2 SmartNIC MT41686 - MBF2H332A-AEEOT_A1 (2x25G)
* Host interface: PCI Express 3.0 x16
* Device ID: 15b3:a2d6
* Firmware version: 24.47.1026 and above
* NVIDIA\ |reg| BlueField\ |reg|-3 P-Series DPU MT41692 - 900-9D3B6-00CV-AAB (2x200G)
* Host interface: PCI Express 5.0 x16
* Device ID: 15b3:a2dc
* Firmware version: 32.47.1026 and above
* Embedded software:
* Ubuntu 24.04
* MLNX_OFED 25.10-1.2.8.0
* bf-bundle-3.2.0-113_25.10_ubuntu-24.04
* DPDK application running on ARM cores
* IBM Power 9 platforms with NVIDIA\ |reg| NICs combinations
* CPU:
* POWER9 2.2 (pvr 004e 1202)
* OS:
* Ubuntu 20.04
* NICs:
* NVIDIA\ |reg| ConnectX\ |reg|-6 Dx 100G MCX623106AN-CDAT (2x100G)
* Host interface: PCI Express 4.0 x16
* Device ID: 15b3:101d
* Firmware version: 22.47.1026 and above
* NVIDIA\ |reg| ConnectX\ |reg|-7 200G CX713106AE-HEA_QP1_Ax (2x200G)
* Host interface: PCI Express 5.0 x16
* Device ID: 15b3:1021
* Firmware version: 28.47.1026 and above
* DOCA:
* DOCA 3.2.0-125000 and above
* Intel\ |reg| platforms with Intel\ |reg| NICs combinations
* CPU
* Intel\ |reg| Atom\ |trade| x7835RE
* Intel\ |reg| Xeon\ |reg| 6553P-B CPU @ 2.6GHz
* Intel\ |reg| Xeon\ |reg| 6767P CPU @ 2.4GHz
* Intel\ |reg| Xeon\ |reg| CPU Max 9480
* Intel\ |reg| Xeon\ |reg| CPU Max 9480 CPU @ 1.9GHz
* Intel\ |reg| Xeon\ |reg| Gold 6330 CPU @ 2.00GHz
* Intel\ |reg| Xeon\ |reg| Gold 6348 CPU @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8280M CPU @ 2.70GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8380 CPU @ 2.30GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8468H CPU @ 2.1GHz
* Intel\ |reg| Xeon\ |reg| Platinum 8490H CPU @ 1.9GHz
* OS:
* Fedora 42
* FreeBSD 14.3
* Microsoft Azure Linux 3.0
* OpenAnolis OS 8.10
* openEuler 24.03 (LTS-SP2)
* Red Hat Enterprise Linux Server release 10
* Red Hat Enterprise Linux Server release 9.6
* Ubuntu 24.04 LTS
* Ubuntu 24.04.3 LTS
* VMware ESXi 8.0.3
* NICs:
* Intel\ |reg| Ethernet Controller E810-C for SFP (4x25G)
* Firmware version: 4.90 0x80020eeb 1.3863.0
* Device ID (PF/VF): 8086:1593 / 8086:1889
* Driver version (out-of-tree): 2.3.14 (ice)
* Driver version (in-tree): 6.8.0-86-generic (Ubuntu24.04 LTS) (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0
* Intel\ |reg| Ethernet Controller E810-C for QSFP (2x100G)
* Firmware version: 4.90 0x80020ef2 1.3863.0
* Device ID (PF/VF): 8086:1592 / 8086:1889
* Driver version (out-of-tree): 2.3.14 (ice)
* Driver version (in-tree): 6.6.12.1-1.azl3+ice+ (Microsoft Azure Linux 3.0) /
6.12.0-55.9.1.el10_0.x86_64+rt (RHEL10) (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0
* Intel\ |reg| Ethernet Controller E830-CC for SFP
* Firmware version: 1.20 0x800179c0 1.3862.0
* Device ID (PF/VF): 8086:12d3 / 8086:1889
* Driver version: 2.3.14 (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0
* Intel\ |reg| Ethernet Controller E830-CC for QSFP
* Firmware version: 1.20 0x800179c1 1.3862.0
* Device ID (PF/VF): 8086:12d2 / 8086:1889
* Driver version: 2.3.14 (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0
* Intel\ |reg| Ethernet Connection E825-C for QSFP
* Firmware version: 4.04 0x80007e5c 1.3885.0
* Device ID (PF/VF): 8086:579d / 8086:1889
* Driver version: 2.3.14 (ice)
* OS Default DDP: 1.3.43.0
* COMMS DDP: 1.3.55.0
* Wireless Edge DDP: 1.3.25.0
* Intel\ |reg| Ethernet Network Adapter E610-XT2
* Firmware version: 1.30 0x8000e8a2 1.3864.0
* Device ID (PF/VF): 8086:57b0 / 8086:57ad
* Driver version (out-of-tree): 6.2.5 (ixgbe)
* Intel\ |reg| Ethernet Network Adapter E610-XT4
* Firmware version: 1.30 0x8000e8a5 1.3864.0
* Device ID (PF/VF): 8086:57b0 / 8086:57ad
* Driver version (out-of-tree): 6.2.5 (ixgbe)
* Intel\ |reg| Ethernet Converged Network Adapter X710-DA4 (4x10G)
* Firmware version: 9.55 0x8000fdf4 1.3862.0
* Device ID (PF/VF): 8086:1572 / 8086:154c
* Driver version (in-tree): 6.8.0-88-generic (i40e)
* Intel\ |reg| Corporation Ethernet Connection X722 for 10GbE SFP+ (2x10G)
* Firmware version: 6.51 0x80004430 1.3862.0
* Device ID (PF/VF): 8086:37d0 / 8086:37cd
* Driver version (out-of-tree): 2.28.13 (i40e)
* Intel\ |reg| Ethernet Converged Network Adapter XXV710-DA2 (2x25G)
* Firmware version: 9.55 0x8000fe4c 1.3862.0
* Device ID (PF/VF): 8086:158b / 8086:154c
* Driver version (out-of-tree): 2.28.13 (i40e)
* Driver version (in-tree): 6.8.0-88-generic (Ubuntu24.04.3 LTS) /
6.12.0-55.9.1.el10_0.x86_64 (RHEL10) (i40e)
* Intel\ |reg| Ethernet Converged Network Adapter XL710-QDA2 (2X40G)
* Firmware version(PF): 9.55 0x8000fe31 1.3862.0
* Device ID (PF/VF): 8086:1583 / 8086:154c
* Driver version (out-of-tree): 2.28.13 (i40e)
* Intel\ |reg| Ethernet Controller I226-LM
* Firmware version: 2.14, 0x8000028c
* Device ID (PF): 8086:125b
* Driver version (in-tree): 6.8.0-87-generic (Ubuntu24.04.3 LTS) (igc)
* Intel\ |reg| Corporation Ethernet Server Adapter I350-T4
* Firmware version: 1.63, 0x8000116b
* Device ID (PF/VF): 8086:1521 /8086:1520
* Driver version: 6.14.0-35-generic (Ubuntu 24.04.3 LTS) (igb)
* Intel\ |reg| Infrastructure Processing Unit (Intel\ |reg| IPU) E2100
* Firmware version: ci-ts.release.2.0.0.11126
* Device ID (idpf/cpfl): 8086:1452/8086:1453
* Driver version: 0.0.772 (idpf)
* Intel\ |reg| platforms with NVIDIA\ |reg| NICs combinations
* CPU:
* Intel\ |reg| Xeon\ |reg| Gold 6154 CPU @ 3.00GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2697A v4 @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2697 v3 @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2680 v2 @ 2.80GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2670 0 @ 2.60GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2650 v4 @ 2.20GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2650 v3 @ 2.30GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2640 @ 2.50GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2650 0 @ 2.00GHz
* Intel\ |reg| Xeon\ |reg| CPU E5-2620 v4 @ 2.10GHz
* OS:
* Red Hat Enterprise Linux release 9.2 (Plow)
* Red Hat Enterprise Linux release 9.1 (Plow)
* Red Hat Enterprise Linux release 8.6 (Ootpa)
* Ubuntu 24.04
* Ubuntu 22.04
* Ubuntu 20.04
* SUSE Enterprise Linux 15 SP4
* DOCA:
* DOCA 3.2.0-125000 and above.
* upstream kernel:
* Linux 6.17.0 and above
* rdma-core:
* rdma-core-58.0 and above
* NICs
* NVIDIA\ |reg| ConnectX\ |reg|-6 Dx EN 100G MCX623106AN-CDAT (2x100G)
* Host interface: PCI Express 4.0 x16
* Device ID: 15b3:101d
* Firmware version: 22.47.1026 and above
* NVIDIA\ |reg| ConnectX\ |reg|-6 Lx EN 25G MCX631102AN-ADAT (2x25G)
* Host interface: PCI Express 4.0 x8
* Device ID: 15b3:101f
* Firmware version: 26.47.1026 and above
* NVIDIA\ |reg| ConnectX\ |reg|-7 200G CX713106AE-HEA_QP1_Ax (2x200G)
* Host interface: PCI Express 5.0 x16
* Device ID: 15b3:1021
* Firmware version: 28.47.1026 and above
* NVIDIA\ |reg| ConnectX\ |reg|-8 SuperNIC 400G MT4131 - 900-9X81Q-00CN-STA (2x400G)
* Host interface: PCI Express 6.0 x16
* Device ID: 15b3:1023
* Firmware version: 40.47.1026 and above
* NVIDIA\ |reg| ConnectX\ |reg|-9 SuperNIC 800G MT4133 - 900-9X91E-00EB-STA_Ax (1x800G)
* Host interface: PCI Express 6.0 x16
* Device ID: 15b3:1025
* Firmware version: 82.47.0366 and above
* NVIDIA\ |reg| BlueField\ |reg| SmartNIC
* NVIDIA\ |reg| BlueField\ |reg|-2 SmartNIC MT41686 - MBF2H332A-AEEOT_A1 (2x25G)
* Host interface: PCI Express 3.0 x16
* Device ID: 15b3:a2d6
* Firmware version: 24.47.1026 and above
* NVIDIA\ |reg| BlueField\ |reg|-3 P-Series DPU MT41692 - 900-9D3B6-00CV-AAB (2x200G)
* Host interface: PCI Express 5.0 x16
* Device ID: 15b3:a2dc
* Firmware version: 32.47.1026 and above
* Embedded software:
* Ubuntu 24.04
* MLNX_OFED 25.10-1.2.8.0
* bf-bundle-3.2.0-113_25.10_ubuntu-24.04
* DPDK application running on ARM cores
* IBM Power 9 platforms with NVIDIA\ |reg| NICs combinations
* CPU:
* POWER9 2.2 (pvr 004e 1202)
* OS:
* Ubuntu 20.04
* NICs:
* NVIDIA\ |reg| ConnectX\ |reg|-6 Dx 100G MCX623106AN-CDAT (2x100G)
* Host interface: PCI Express 4.0 x16
* Device ID: 15b3:101d
* Firmware version: 22.47.1026 and above
* NVIDIA\ |reg| ConnectX\ |reg|-7 200G CX713106AE-HEA_QP1_Ax (2x200G)
* Host interface: PCI Express 5.0 x16
* Device ID: 15b3:1021
* Firmware version: 28.47.1026 and above
* DOCA:
* DOCA 3.2.0-125000 and above
🤖 Prompt for AI Agents
In doc/guides/rel_notes/release_25_11.rst around lines 349 to 600, there's a
typo in the OS list where "Vmware ESXi 8.0.3" should be corrected to "VMware
ESXi 8.0.3"; update the spelling/capitalization to "VMware" to match the proper
product name and ensure consistency with other entries.

Comment on lines +115 to 117
extern uint32_t rx_burst_size;
extern uint32_t mb_mempool_cache_size;

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

TX burst threshold in send_single_packet is wired to RX size, not TX size

send_single_packet() now flushes the TX buffer when:

len = qconf->tx_mbufs[port].len;
...
if (unlikely(len == rx_burst_size)) {
    send_burst(qconf, rx_burst_size, port);
    len = 0;
}

while l3fwd_common.h introduces a separate tx_burst_size and uses it in send_packetsx4() as the TX threshold.

This creates two problems:

  1. --tx-burst is not honored in this path – TX flush behavior from send_single_packet() still depends on rx_burst_size, so tuning --tx-burst will not affect this common code path.
  2. RX/TX coupling – RX and TX thresholds are unintentionally tied together here, defeating the purpose of per-direction burst sizing.

Unless there is a deliberate reason to share the RX threshold for this particular path, it looks like this should use tx_burst_size instead of rx_burst_size both for the comparison and for the send_burst() count.

Suggested fix:

-extern uint32_t rx_burst_size;
+extern uint32_t rx_burst_size;
+extern uint32_t tx_burst_size;  /* if not already visible here */

...

-    /* enough pkts to be sent */
-    if (unlikely(len == rx_burst_size)) {
-        send_burst(qconf, rx_burst_size, port);
+    /* enough pkts to be sent */
+    if (unlikely(len == tx_burst_size)) {
+        send_burst(qconf, tx_burst_size, port);
         len = 0;
     }

This would make both TX paths (send_single_packet and send_packetsx4) consistently controlled by tx_burst_size and keep RX and TX burst tuning independent, as the new CLI options imply.

Also applies to: 141-153

🤖 Prompt for AI Agents
In examples/l3fwd/l3fwd.h around lines 115-117 (and also apply the same change
at lines 141-153), the TX flush in send_single_packet is incorrectly using
rx_burst_size; change the comparison and the send_burst call to use
tx_burst_size instead so that send_single_packet flushes based on the transmit
burst threshold; update both occurrences to call send_burst(qconf,
tx_burst_size, port) and compare len against tx_burst_size to keep RX and TX
burst sizing independent.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.