Add: Support for DPDK 26.07, ICE 2.6.7 and IAVF 4.13.35 - #1698
Open
DawidWesierski4 wants to merge 1 commit into
Open
Add: Support for DPDK 26.07, ICE 2.6.7 and IAVF 4.13.35#1698DawidWesierski4 wants to merge 1 commit into
DawidWesierski4 wants to merge 1 commit into
Conversation
DawidWesierski4
requested review from
Sakoram,
awilczyns,
moleksy and
soopel
as code owners
August 28, 2026 14:09
Collaborator
Author
|
Do not merge before #1700 |
`versions.env` now pins DPDK 26.07, ICE 2.6.7 and, for the first time, an IAVF version of its own (4.13.35 with download id 18159). `DPDK_REPO` and `ICE_REPO` go, because no script read either one. `patches/dpdk/26.07/` is the 26.03 series, rebased, less what upstream 26.07 already holds. Two of them come from work this branch did on the 26.03 series first, so the two series say the same thing: * `0001-net-iavf-disable-runtime-queue-setup-during-queue-rate-limiting` takes `RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP` and its TX partner away always, as the 26.03 patch does. The first shape of this patch made the capability follow `vf->qtc_map`, but MTL reads `dev_capa` once in `mt_dev_create`, before it commits the rate limit hierarchy, so the capability was still on. MTL then started and stopped one Rx queue per session, and an E810 VF queue that stops once never receives again: run 33161105103 reported `fb_rec 0` with `rx_hw_dropped_packets` past two million. The same patch also dropped its two added `rte_free()` calls. One of them freed `vf->qtc_map`, which upstream 26.07 gets from libc `calloc()`, so `rte_free()` read a malloc element header the DPDK heap never wrote and faulted in `librte_eal` (run 33155049621); the other freed a block the next line frees again. * `0008-pcapng-add-user-timestamp-support` is a copy of the 26.03 patch of the same name, which the first draft of this series left out. That patch is the only source of `MTL_DPDK_HAS_PCAPNG_TS` and of `rte_pcapng_copy_ts()`, and upstream 26.07 holds neither, so `lib/src/mt_pcap.h` took its `#else` branch and built the stub `mt_pcap_open()`. `St20_rx.pcap_dump` then failed on every NIC with "no pcap support for this build" (run 33166408995). It applies to 26.07 with no offset and no fuzz. `patches/dpdk/26.07/windows/0001-mingw-build-and-runtime-fixes.patch` carries the Windows build over. Two 26.03 patch files are renamed to the subject line they carry. One of them held a colon in its file name, which Windows cannot check out. The style pull request makes that one rename on its own, with no change of content, so after it lands only the content change of that file is left here and the two renames merge without a conflict. `patches/ice_drv/2.6.7/` rebases the 2.6.6 series and adds `0002-ice-reduce-TX-scheduler-default-burst-size-to-2-KB`. `patches/iavf_drv/4.13.35/` holds the one virtchnl fix the out-of-tree IAVF module needs, so the two kernel modules of a test host can come from the same source revision. `struct mtl_port_init_params` gains `uint32_t rl_burst_size`. A non-zero value goes to the ice PF driver as the `rl_burst_size` devarg of that port, so an application can ask for a burst size other than the hardware default without a rebuild of the driver. Zero keeps the default. Only a port that DPDK drives as an ice PF takes the key: the iavf driver rejects it and the VF fails to probe with `-EINVAL`. So `mt_user_params_check()` warns when the field is set on any other PMD type, and the ice driver, not MTL, owns the valid range. `dev_eal_init()` builds one EAL argument per port into a fixed buffer, and the buffer size was the literal `2 * MTL_PORT_MAX_LEN` in five places. It is now `MT_EAL_PORT_ARG_MAX_LEN`, with a comment that measures the widest writer, and each `snprintf()` and `memset()` takes `sizeof` the buffer instead of repeating the expression. `tests/unit/dev/mt_dev_devargs_test.cpp` covers the builder: a bare BDF when the field is zero, the appended devarg when it is set, one port not taking another port's value, a value out of range passed through, and the longest BDF with `UINT32_MAX` not truncated. No other tier reaches this code, because CI runs `auto` and `tsc` pacing only. `dev_if_init_pacing()` refused to initialize a port when `dev_rl_init_nonleaf_nodes()` failed, even when `rl` was the port's own auto-detected choice and not the user's. It now falls back to `ST21_TX_PACING_WAY_TSC` with a warning in that case, which is what a failing queue rate limit below it already does. An explicit `--pacing_way rl` still fails, because that one is the user's choice. GNU `patch` recovers a stale `@@` header by searching for the hunk, applying it at an offset, and still exits 0. So an exit code cannot find a patch that drifted from the tarball it was written against, but the absence of an "offset" or "fuzz" line can. The new script applies each `patches/dpdk/<version>/*.patch` to its pinned archive and fails on any offset or fuzz. A version with no archive is skipped, and a skip of the version `versions.env` pins is a failure, so a skip can never read as a pass. `doc/dma.md` gains the DSA facts a host needs: `8086:0b25` is on the `vfio-pci` denylist, so `vfio-pci` must load with `disable_denylist=1`; one device is enough, because MTL enumerates every dmadev that was probed rather than looking for a name; and the `accel-config` mode does not apply, because its dmadevs have no multi-process support and the gtest suite runs a transmitter and a receiver as two processes. `rust/imtl-sys/examples/no_std.rs` builds the two structures field by field, so it needed the new `rl_burst_size` field, and the `port_packet_loss` array and the wider `dma_dev_port` that it had not caught up with. Signed-off-by: Wesierski, Dawid <dawid.wesierski@intel.com>
awilczyns
force-pushed
the
driver/dpdk-26.07-ice-2.6.7
branch
from
September 1, 2026 14:03
04db7cd to
09a2356
Compare
Sakoram
reviewed
Sep 1, 2026
Comment on lines
+550
to
+557
| /** | ||
| * Optional for MTL_PMD_DPDK_USER. TX scheduler rate limit burst size in bytes, passed | ||
| * to the ice PF driver as the rl_burst_size devarg on this port. Zero keeps the | ||
| * hardware default. Only set this for a port DPDK drives as an ice PF: the iavf driver | ||
| * rejects the key, so a VF port fails to probe with -EINVAL. The ice driver validates | ||
| * the range and fails the probe if the value is out of it. | ||
| */ | ||
| uint32_t rl_burst_size; |
Collaborator
There was a problem hiding this comment.
do we really need this new parameter? I don't like API changes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
versions.envnow pins DPDK 26.07, ICE 2.6.7 and, for the first time, an IAVF version of its own (4.13.35 with download id 18159).DPDK_REPOandICE_REPOgo, because no script read either one.patches/dpdk/26.07/is the 26.03 series, rebased, less what upstream 26.07 already holds. Two of them come from work this branch did on the 26.03 series first, so the two series say the same thing:0001-net-iavf-disable-runtime-queue-setup-during-queue-rate-limitingtakesRTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUPand its TX partner away always, as the 26.03 patch does. The first shape of this patch made the capability followvf->qtc_map, but MTL readsdev_capaonce inmt_dev_create, before it commits the rate limit hierarchy, so the capability was still on. MTL then started and stopped one Rx queue per session, and an E810 VF queue that stops once never receives again: run 33161105103 reportedfb_rec 0withrx_hw_dropped_packetspast two million. The same patch also dropped its two addedrte_free()calls. One of them freedvf->qtc_map, which upstream 26.07 gets from libccalloc(), sorte_free()read a malloc element header the DPDK heap never wrote and faulted inlibrte_eal(run 33155049621); the other freed a block the next line frees again.0008-pcapng-add-user-timestamp-supportis a copy of the 26.03 patch of the same name, which the first draft of this series left out. That patch is the only source ofMTL_DPDK_HAS_PCAPNG_TSand ofrte_pcapng_copy_ts(), and upstream 26.07 holds neither, solib/src/mt_pcap.htook its#elsebranch and built the stubmt_pcap_open().St20_rx.pcap_dumpthen failed on every NIC with "no pcap support for this build" (run 33166408995). It applies to 26.07 with no offset and no fuzz.patches/dpdk/26.07/windows/0001-mingw-build-and-runtime-fixes.patchcarries the Windows build over.Two 26.03 patch files are renamed to the subject line they carry. One of them held a colon in its file name, which Windows cannot check out. The style pull request makes that one rename on its own, with no change of content, so after it lands only the content change of that file is left here and the two renames merge without a conflict.
patches/ice_drv/2.6.7/rebases the 2.6.6 series and adds0002-ice-reduce-TX-scheduler-default-burst-size-to-2-KB.patches/iavf_drv/4.13.35/holds the one virtchnl fix the out-of-tree IAVF module needs, so the two kernel modules of a test host can come from the same source revision.struct mtl_port_init_paramsgainsuint32_t rl_burst_size. A non-zero value goes to the ice PF driver as therl_burst_sizedevarg of that port, so an application can ask for a burst size other than the hardware default without a rebuild of the driver. Zero keeps the default.Only a port that DPDK drives as an ice PF takes the key: the iavf driver rejects it and the VF fails to probe with
-EINVAL. Somt_user_params_check()warns when the field is set on any other PMD type, and the ice driver, not MTL, owns the valid range.dev_eal_init()builds one EAL argument per port into a fixed buffer, and the buffer size was the literal2 * MTL_PORT_MAX_LENin five places. It is nowMT_EAL_PORT_ARG_MAX_LEN, with a comment that measures the widest writer, and eachsnprintf()andmemset()takessizeofthe buffer instead of repeating the expression.tests/unit/dev/mt_dev_devargs_test.cppcovers the builder: a bare BDF when the field is zero, the appended devarg when it is set, one port not taking another port's value, a value out of range passed through, and the longest BDF withUINT32_MAXnot truncated. No other tier reaches this code, because CI runsautoandtscpacing only.dev_if_init_pacing()refused to initialize a port whendev_rl_init_nonleaf_nodes()failed, even whenrlwas the port's own auto-detected choice and not the user's. It now falls back toST21_TX_PACING_WAY_TSCwith a warning in that case, which is what a failing queue rate limit below it already does. An explicit--pacing_way rlstill fails, because that one is the user's choice.GNU
patchrecovers a stale@@header by searching for the hunk, applying it at an offset, and still exits 0. So an exit code cannot find a patch that drifted from the tarball it was written against, but the absence of an "offset" or "fuzz" line can. The new script applies eachpatches/dpdk/<version>/*.patchto its pinned archive and fails on any offset or fuzz. A version with no archive is skipped, and a skip of the versionversions.envpins is a failure, so a skip can never read as a pass.doc/dma.mdgains the DSA facts a host needs:8086:0b25is on thevfio-pcidenylist, sovfio-pcimust load withdisable_denylist=1; one device is enough, because MTL enumerates every dmadev that was probed rather than looking for a name; and theaccel-configmode does not apply, because its dmadevs have no multi-process support and the gtest suite runs a transmitter and a receiver as two processes.rust/imtl-sys/examples/no_std.rsbuilds the two structures field by field, so it needed the newrl_burst_sizefield, and theport_packet_lossarray and the widerdma_dev_portthat it had not caught up with.