Skip to content

Conversation

@ovsrobot
Copy link
Owner

@ovsrobot ovsrobot commented Dec 4, 2025

Auto-submission for "http://patchwork.dpdk.org/project/dpdk/list/?series=36843"

Summary by Sourcery

Add iteration APIs for EAL driver paths, propagate driver-path flags into spawned test processes, fully classify unit tests into suites with explicit NOHUGE/ASAN capabilities, and adjust CI and release metadata to a new reference release.

New Features:

  • Expose EAL APIs and macros to iterate over and count driver paths, with support for filtering to command-line–specified drivers only.

Bug Fixes:

  • Prevent undefined behavior in RED queue empty-factor calculation when the shift amount is zero.
  • Fix RCU QSBR selective check bitmap updates to use the correct 64-bit bit mask macro.
  • Ensure the timer secondary unit test always signals the manager to exit even on failure and reduce timeout jitter.
  • Return a skipped status rather than an error when power capability tests run on unsupported environments.

Enhancements:

  • Track whether dynamically loaded drivers originate from command-line flags and provide filtered iteration/counting based on that.
  • Propagate current process driver-path options to child test processes to preserve environment consistency.
  • Standardize fast-test registration to use explicit NOHUGE/ASAN capability enums and assign all relevant tests to suites, including converting several generic test registrations to fast or driver tests.
  • Tighten Meson suite parsing to validate fast-test parameters and treat non-suite tests more robustly in the extraction script.
  • Refine timer-secondary timeouts to make the test more reliable and less timing-sensitive.
  • Suppress an additional MSVC warning for the ICE base driver and clean up assorted minor formatting issues in drivers and core code.

Build:

  • Update CI workflow to build and test against the v25.11 reference tag and include ABI checks in one of the Linux GCC jobs.
  • Introduce a new release_26_03 notes stub and refresh versioning and documentation assets for the next release cycle.

CI:

  • Extend CI coverage by enabling ABI checks alongside debug, docs, examples, and tests in the Linux GCC build job.

Documentation:

  • Add a placeholder release notes document for the 26.03 release and refresh various guide images and licensing/doc assets.

Tests:

  • Propagate driver-path flags into duplicated test processes and add helper APIs to support this in EAL and the test harness.
  • Fully annotate fast tests with NOHUGE/ASAN capability flags across the test suite and convert multiple generic tests into fast or driver tests to integrate them into automated suites.
  • Adjust several timing- and environment-sensitive tests (e.g., timer, timer secondary, power, external memory, multiprocess) to better support hugepage-free and ASan configurations and to use skip semantics where appropriate.

Chores:

  • Perform minor whitespace and formatting cleanups across multiple drivers and core files without changing behavior.

tmonjalo and others added 16 commits November 30, 2025 15:40
Starting with NVIDIA ConnectX-9, the future devices will support
only hardware steering (HWS) flow engine.
The software steering options (legacy Verbs and Direct Verbs)
have lower performances, and won't be available for new devices.
Both flow APIs (sync and async template) will still be supported
with the hardware steering flow engine.

Fixes: 1b55eeb ("common/mlx5: add ConnectX-9 SuperNIC")

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
The tool ripgrep allows to find files not ending with a line break:
	rg -Ul '[^\n]\z'

The files with a trailing blank lines are shown with this command:
	rg -Ul '\n\n\z'

Files are fixed to end with a single line break.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Start a new release cycle with empty release notes.
Bump version and ABI minor.

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Aaron Conole <aconole@redhat.com>
Acked-by: Thomas Monjalon <thomas@monjalon.net>
Within GitHub actions, with MSVC 19.44.35219,
the following error can be reported:

...\rte_rcu_qsbr.h(566): error C2220:
	the following warning is treated as an error
...\rte_rcu_qsbr.h(566): warning C4319:
	'~': zero extending 'unsigned long' to 'uint64_t' of greater size

To fix this, replace the "1UL" with RTE_BIT64 to force a 64-bit value
on all platforms.

Fixes: 64994b5 ("rcu: add RCU library supporting QSBR mechanism")
Cc: stable@dpdk.org

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Disable warning about
"zero extending 'unsigned long' to 'u64' of greater size"
in base code builds.

Cc: stable@dpdk.org

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
For the fast tests, we have two extra parameters specifying when the
test can be run without hugepages or using ASan. The true/false nature
of these parameters is not very clear, so change things so that they are
explicitly specified as NOHUGE_OK/NOHUGE_SKIP and ASAN_OK/ASAN_SKIP
instead.  Explicitly validate the options in the meson.build files,
rather than just checking for one of the pair of options - which can
hide errors.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
The shift of a negative number (or very large positive) is undefined
behaviour which causes errors when run with UBSan. Fix this by making
the behaviour explicit for the edge case of n being zero in the
calculation.

Fixes: de3cfa2 ("sched: initial import")
Cc: stable@dpdk.org

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
Reduce the timer duration and the primary wait duration in the secondary
process timer autotest. This should help ensure it doesn't time out what
run in a CI environment.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
When the secondary process run from timer_secontary_autotest fails, the
timer loop is never stopped so the whole process hangs until timeout.
Fix this by setting the stop flag before checking for success or failure
of the secondary process.

Fixes: 50247fe ("test/timer: exercise new APIs in secondary process")
Cc: stable@dpdk.org

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
Add APIs for internal DPDK use to allow querying the paths of drivers
loaded into the running instance.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
For unit tests which run secondary processes, allow passing the driver
paths used by the primary process to that secondary. This allows use of
mempools in those secondary tests. Without this, any tests using
mempools in secondary process will fail in shared builds.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
If the power subsystem cannot be initialized e.g. due to not being root,
skip the capabilities test, rather than failing it.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
There are quite a number of test cases defined which are not present in
any test-suite. Meson warns about these on build, so reduce the warnings
by adding external-mem, ipsec-sad, red, power-caps and secondary timer
test cases to the fast-test suite.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
A number of eventdev, cryptodev and ethdev tests require devices to be
present in order to run so add them to the "driver" suite of tests.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
If there are no tests which are not assigned to a test suite, omit the
line printing the non_suite_tests. This avoid having error messages from
meson about test "" not being in any test suite.

Fixes: 25065ef ("test: emit warning for orphaned tests")
Cc: stable@dpdk.org

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: 0-day Robot <robot@bytheb.org>
@sourcery-ai
Copy link

sourcery-ai bot commented Dec 4, 2025

Reviewer's Guide

Introduce internal APIs to iterate/count EAL driver paths and propagate -d/--driver-path options into child test processes; normalize fast-test registration to use NOHUGE_/ASAN_ flags and wire nearly all unit tests into Meson suites; fix a few correctness/robustness issues (RED rounding UB, RCU bitmask), refine some tests’ behavior and skipping logic, and update CI, docs, and metadata for the v25.11/v26.03 baseline.

Sequence diagram for iterating EAL driver paths with cmdline_only filter

sequenceDiagram
    participant TestProcess
    participant EAL
    participant solib_list

    TestProcess->>EAL: RTE_EAL_DRIVER_PATH_FOREACH(path, true)
    activate EAL
    loop foreach expansion
        EAL->>EAL: rte_eal_driver_path_next(start, true)
        EAL->>solib_list: locate start entry
        alt start is NULL
            EAL->>solib_list: take TAILQ_FIRST
        else start not NULL
            EAL->>solib_list: advance to TAILQ_NEXT
        end
        alt cmdline_only == true
            EAL->>solib_list: skip entries with from_cmdline == false
        end
        EAL-->>TestProcess: return next path (or NULL)
        opt path is NULL
            TestProcess->>EAL: loop terminates
        end
    end
    deactivate EAL
Loading

Class diagram for updated EAL driver path management

classDiagram
    class shared_driver {
        +char name[PATH_MAX]
        +void* lib_handle
        +bool from_cmdline
    }

    class EALPluginManager {
        +int eal_plugin_add(const char* path, bool from_cmdline)
        +const char* rte_eal_driver_path_next(const char* start, bool cmdline_only)
        +unsigned int rte_eal_driver_path_count(bool cmdline_only)
    }

    class EALArgs {
        +struct internal_config internal_cfg
        +int eal_parse_args(void)
    }

    EALPluginManager "1" --> "*" shared_driver : manages
    EALArgs "1" --> "*" shared_driver : populates via eal_plugin_add
Loading

File-Level Changes

Change Details Files
Track origin of dynamically loaded drivers and expose iteration/count helpers for driver paths, then reuse them to forward driver-path flags into forked test processes.
  • Extend shared_driver struct with a from_cmdline flag to distinguish drivers loaded via -d from directory-discovered ones.
  • Change eal_plugin_add to accept a from_cmdline boolean and plumb it through all call sites, marking directory/default-path loads as false and CLI-specified paths as true.
  • Add rte_eal_driver_path_next and rte_eal_driver_path_count APIs plus RTE_EAL_DRIVER_PATH_FOREACH macro to iterate/count driver paths, with optional filtering to only cmdline paths.
  • Use the new driver-path iteration APIs in app/test process_dup to append --driver-path parameters to the argv of spawned child test processes, and adjust argv sizing accordingly.
lib/eal/common/eal_common_options.c
lib/eal/include/rte_eal.h
app/test/process.h
Normalize fast-test registration to encode ASan/hugepage requirements symbolically and tighten Meson/test-suites wiring so all unit tests are assigned to suites.
  • Redefine REGISTER_FAST_TEST to take NOHUGE_OK/NOHUGE_SKIP and ASAN_OK/ASAN_SKIP flags instead of raw booleans, documenting the contract in test.h.
  • Update all existing REGISTER_FAST_TEST call sites in unit tests to use the new NOHUGE_/ASAN_ flags, and convert some REGISTER_TEST_COMMANDs to REGISTER_FAST_TEST or REGISTER_DRIVER_TEST to ensure tests are categorized into suites.
  • Enhance app/test/suites/meson.build to validate the NOHUGE_/ASAN_ flag values and interpret them correctly instead of relying on lowercased booleans.
  • Adjust buildtools/get-test-suites.py to stop lowercasing fast-test parameters and to only print non_suite_tests when that list is non-empty, aligning with the new flag semantics.
app/test/test.h
app/test/test_eal_flags.c
app/test/test_timer_secondary.c
app/test/test_rwlock.c
app/test/test_bpf.c
app/test/test_power_cpufreq.c
app/test/test_security_inline_proto.c
app/test/test_event_eth_rx_adapter.c
app/test/test_eventdev.c
app/test/test_graph.c
app/test/test_stack.c
app/test/test_acl.c
app/test/test_alarm.c
app/test/test_argparse.c
app/test/test_atomic.c
app/test/test_bitcount.c
app/test/test_bitmap.c
app/test/test_bitops.c
app/test/test_bitratestats.c
app/test/test_bitset.c
app/test/test_byteorder.c
app/test/test_cfgfile.c
app/test/test_cksum.c
app/test/test_cmdline.c
app/test/test_common.c
app/test/test_compressdev.c
app/test/test_cpuflags.c
app/test/test_crc.c
app/test/test_cryptodev_crosscheck.c
app/test/test_cycles.c
app/test/test_debug.c
app/test/test_devargs.c
app/test/test_dispatcher.c
app/test/test_distributor.c
app/test/test_eal_fs.c
app/test/test_errno.c
app/test/test_ethdev_api.c
app/test/test_ethdev_link.c
app/test/test_event_crypto_adapter.c
app/test/test_event_eth_tx_adapter.c
app/test/test_event_ring.c
app/test/test_event_timer_adapter.c
app/test/test_event_vector_adapter.c
app/test/test_external_mem.c
app/test/test_fbarray.c
app/test/test_fib.c
app/test/test_fib6.c
app/test/test_func_reentrancy.c
app/test/test_graph_feature_arc.c
app/test/test_hash.c
app/test/test_hash_readwrite.c
app/test/test_interrupts.c
app/test/test_ipfrag.c
app/test/test_ipsec.c
app/test/test_ipsec_sad.c
app/test/test_kvargs.c
app/test/test_latencystats.c
app/test/test_lcore_var.c
app/test/test_lcores.c
app/test/test_logs.c
app/test/test_lpm.c
app/test/test_lpm6.c
app/test/test_malloc.c
app/test/test_mbuf.c
app/test/test_mcslock.c
app/test/test_member.c
app/test/test_memcpy.c
app/test/test_memory.c
app/test/test_mempool.c
app/test/test_memzone.c
app/test/test_meter.c
app/test/test_metrics.c
app/test/test_mp_secondary.c
app/test/test_net_ether.c
app/test/test_net_ip6.c
app/test/test_pcapng.c
app/test/test_pdcp.c
app/test/test_pdump.c
app/test/test_per_lcore.c
app/test/test_pflock.c
app/test/test_pie.c
app/test/test_pmd_ring.c
app/test/test_pmu.c
app/test/test_power.c
app/test/test_power_intel_uncore.c
app/test/test_power_kvm_vm.c
app/test/test_prefetch.c
app/test/test_ptr_compress.c
app/test/test_rawdev.c
app/test/test_rcu_qsbr.c
app/test/test_red.c
app/test/test_reorder.c
app/test/test_rib.c
app/test/test_rib6.c
app/test/test_ring.c
app/test/test_sched.c
app/test/test_security.c
app/test/test_security_inline_macsec.c
app/test/test_seqlock.c
app/test/test_service_cores.c
app/test/test_soring.c
app/test/test_spinlock.c
app/test/test_string_fns.c
app/test/test_table.c
app/test/test_tailq.c
app/test/test_telemetry_data.c
app/test/test_telemetry_json.c
app/test/test_thash.c
app/test/test_threads.c
app/test/test_ticketlock.c
app/test/test_timer.c
app/test/test_trace.c
app/test/test_vdev.c
app/test/test_version.c
app/test/suites/meson.build
buildtools/get-test-suites.py
Refine specific test behaviors and skipping semantics to improve stability and correctness under multiprocess, timing, and environment-sensitive scenarios.
  • In test_timer_secondary, ensure the exit_flag is set even if the secondary process fails, reduce delay before signalling exit to 500ms, and reduce timer randomness range to 10–80ms.
  • Change test_power_caps to return TEST_SKIPPED when the power environment is not properly configured instead of treating it as a hard failure, and register it as a fast test with appropriate flags.
  • Reclassify various environment- or driver-dependent tests from generic REGISTER_TEST_COMMAND to REGISTER_DRIVER_TEST or REGISTER_FAST_TEST so they participate correctly in suite-based execution and skip behavior.
app/test/test_timer_secondary.c
app/test/test_power_cpufreq.c
app/test/test_security_inline_proto.c
app/test/test_event_eth_rx_adapter.c
app/test/test_event_crypto_adapter.c
app/test/test_event_timer_adapter.c
app/test/test_ethdev_api.c
app/test/test_external_mem.c
app/test/test_event_eth_rx_adapter.c
app/test/test_event_eth_rx_adapter.c
Fix low-level library correctness issues and portability, including a RED calculation UB and RCU bitmask handling, plus compiler-specific warning suppression.
  • Guard the RED qempty-factor calculation against undefined behavior by handling the n == 0 case explicitly and only applying rounding/shift when n > 0.
  • Use RTE_BIT64(j) instead of a raw 1UL << j in the QSBR selective check loop to avoid potential undefined behavior and make bit operations width-safe.
  • Add MSVC-specific warning suppression (/wd4319) in the ICE base meson.build for zero-extension warnings, and switch various 1UL bitmasks and trailing whitespace/blank-line cleanups in drivers to be more consistent with coding style.
lib/sched/rte_red.h
lib/rcu/rte_rcu_qsbr.h
drivers/net/intel/ice/base/meson.build
drivers/event/dlb2/dlb2_iface.c
drivers/net/bnxt/tf_core/tf_em_common.c
drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_act.c
drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_class.c
drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_defs.h
drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_tbl.c
drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_thor2_class.c
drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_thor_class.c
drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_wh_plus_class.c
drivers/net/gve/base/gve_adminq.c
drivers/net/gve/gve_rss.c
drivers/net/gve/gve_rss.h
drivers/net/hinic/base/hinic_pmd_niccfg.c
drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf_selftest.c
drivers/net/hinic/base/hinic_pmd_mbox.c
drivers/net/hinic/base/meson.build
drivers/net/intel/e1000/base/e1000_82575.c
drivers/net/intel/e1000/base/e1000_mbx.c
drivers/net/intel/e1000/base/e1000_vf.c
drivers/net/intel/i40e/base/i40e_adminq.c
drivers/net/intel/ice/base/ice_flex_pipe.c
drivers/net/intel/ice/base/ice_hw_autogen.h
drivers/net/intel/ixgbe/base/ixgbe_dcb_82599.c
drivers/net/intel/ixgbe/base/ixgbe_x540.h
drivers/net/mlx5/hws/mlx5dr_buddy.c
drivers/net/nfp/nfp_ipsec.c
drivers/net/nfp/nfpcore/nfp_elf.c
drivers/net/ngbe/base/ngbe_dummy.h
drivers/net/ngbe/base/ngbe_phy.c
drivers/net/octeontx/base/octeontx_bgx.h
drivers/net/txgbe/base/txgbe_dcb.c
drivers/net/txgbe/base/txgbe_dcb_hw.c
drivers/net/txgbe/base/txgbe_dummy.h
drivers/net/txgbe/base/txgbe_eeprom.c
drivers/net/virtio/virtio_cvq.c
drivers/vdpa/mlx5/mlx5_vdpa_event.c
Update CI configuration, documentation, and release metadata to align with the v25.11/v26.03 baseline and unit-test workflows.
  • Pin the GitHub Actions reference tag to v25.11 and enable ABI checks in the debug/doc/examples/tests job matrix.
  • Add a new release_26_03.rst notes file and update rel_notes index plus various SVG diagrams in guides to the new release assets.
  • Adjust unit-test documentation, NIC docs, and sample/config files (including DTS tests_config example) for new behavior and ensure non_suite_tests are only printed when present.
  • Introduce or update ABI_VERSION, VERSION, test-bbdev vectors, and license/doc image resources to match the new release series.
.github/workflows/build.yml
doc/guides/rel_notes/index.rst
doc/guides/rel_notes/release_26_03.rst
doc/guides/contributing/img/abi_stability_policy.svg
doc/guides/contributing/img/what_is_an_abi.svg
doc/guides/contributing/unit_test.rst
doc/guides/howto/img/flow_bifurcation_overview.svg
doc/guides/howto/img/virtio_user_for_container_networking.svg
doc/guides/nics/cxgbe.rst
doc/guides/nics/ipn3ke.rst
doc/guides/nics/mlx5.rst
doc/guides/prog_guide/img/bond-mode-0.svg
doc/guides/prog_guide/img/bond-mode-1.svg
doc/guides/prog_guide/img/bond-mode-2.svg
doc/guides/prog_guide/img/bond-mode-3.svg
doc/guides/prog_guide/img/bond-mode-4.svg
doc/guides/prog_guide/img/bond-mode-5.svg
doc/guides/prog_guide/img/lcore_var_mem_layout.svg
doc/guides/prog_guide/img/pdcp_functional_overview.svg
doc/guides/prog_guide/img/predictable_snat_1.svg
doc/guides/prog_guide/img/predictable_snat_2.svg
doc/guides/prog_guide/img/rss_queue_assign.svg
doc/guides/prog_guide/img/static_array_mem_layout.svg
doc/guides/sample_app_ug/img/overlay_networking.svg
dts/configurations/tests_config.example.yaml
ABI_VERSION
VERSION
app/test-bbdev/test_vectors/*
doc/guides/howto/img/flow_bifurcation_overview.svg
license/Linux-syscall-note

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 Dec 4, 2025

Important

Review skipped

More than 25% of the files skipped due to max files limit. The review is being skipped to prevent a low-quality review.

69 files out of 176 files are above the max files limit of 100. Please upgrade to Pro plan to get higher limits.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ 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_36843

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:

  • The new rte_eal_driver_path_next() API relies on pointer equality between the start argument and solib->name; either explicitly document that start must be a pointer previously returned by this API (rather than an arbitrary string) or switch to string comparison to make this more robust.
  • In app/test/suites/meson.build the comment about the extraction script running tolower() no longer matches the updated get-test-suites.py (which now preserves case), so the comment should be updated or removed to avoid confusion.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The new rte_eal_driver_path_next() API relies on pointer equality between the `start` argument and `solib->name`; either explicitly document that `start` must be a pointer previously returned by this API (rather than an arbitrary string) or switch to string comparison to make this more robust.
- In app/test/suites/meson.build the comment about the extraction script running tolower() no longer matches the updated get-test-suites.py (which now preserves case), so the comment should be updated or removed to avoid confusion.

## Individual Comments

### Comment 1
<location> `lib/eal/common/eal_common_options.c:766-767` </location>
<code_context>
+		solib = TAILQ_FIRST(&solib_list);
+	} else {
+		/* Find the current entry based on the name string */
+		TAILQ_FOREACH(solib, &solib_list, next) {
+			if (start == solib->name) {
+				solib = TAILQ_NEXT(solib, next);
+				break;
</code_context>

<issue_to_address>
**suggestion (bug_risk):** The iterator relies on pointer identity for locating `start`, which may be brittle for external callers.

This relies on `start == solib->name`, so callers must pass back the exact pointer returned by `rte_eal_driver_path_next()`. If a caller passes a different pointer to an identical string (e.g., copied or reconstructed), iteration will stop early. To make this more robust, either compare with `strcmp(start, solib->name)` (noting the complexity trade-off) or clearly document that `start` must be one of the pointers previously returned by this API.

Suggested implementation:

```c
	} else {
		/* Find the current entry based on the name string contents */
		TAILQ_FOREACH(solib, &solib_list, next) {
			if (strcmp(start, solib->name) == 0) {
				solib = TAILQ_NEXT(solib, next);
				break;
			}
		}

```

1. At the top of `lib/eal/common/eal_common_options.c`, ensure `#include <string.h>` is present so that `strcmp` is declared. If the file already includes `<string.h>`, no further changes are required.
2. If this API is documented elsewhere (e.g., in a header or external docs) as requiring pointer identity, that documentation should be updated to state that iteration is based on string equality instead.
</issue_to_address>

### Comment 2
<location> `lib/eal/include/rte_eal.h:518-519` </location>
<code_context>
+ * @internal
+ * Iterate over all driver paths.
+ *
+ * This macro provides a convenient way to iterate through all driver paths
+ * that were loaded via -d flags during EAL initialization.
+ *
+ * @param path
</code_context>

<issue_to_address>
**nitpick:** Macro documentation doesn’t align with the `cmdline_only` parameter semantics.

The description for `RTE_EAL_DRIVER_PATH_FOREACH` currently says it iterates only over paths loaded via `-d` flags, but the macro passes the caller’s `cmdline_only` value to `rte_eal_driver_path_next()`, so it can iterate either only `-d` paths or all paths (including directory-expanded ones). Please update the docstring to describe both behaviors, depending on `cmdline_only`.
</issue_to_address>

### Comment 3
<location> `doc/guides/nics/mlx5.rst:1344` </location>
<code_context>
 Faster than software steering (SWS),
-hardware steering (HWS) is the only mode supporting the flow template async API.
+hardware steering (HWS) is the only mode supporting the flow template async API,
+and the only mode supported on device ConnectX-9 and later.

 Flow rules are managed by the hardware,
</code_context>

<issue_to_address>
**nitpick (typo):** Consider using the plural "devices" in "on device ConnectX-9 and later" for grammatical correctness.

Using singular "device" with "ConnectX-9 and later" reads awkward, since it refers to multiple devices; pluralizing to "devices" better matches the intended range.

```suggestion
and the only mode supported on devices ConnectX-9 and later.
```
</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.

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.

5 participants