* [PATCH 1/2] net/iavf: fix local memory leaks in TM hierarchy commit
From: Bruce Richardson @ 2026-07-03 8:33 UTC (permalink / raw)
To: dev
Cc: Bruce Richardson, stable, Vladimir Medvedkin, Ting Xu, Qi Zhang,
Qiming Yang, Wenjun Wu
The iavf_hierachy_commit function uses a number of temporary variables,
which, though small, are still leaked at function end. Clean this up by
freeing them before the function returns. Since these are not variables
that need to be in hugepage memory, also switch from using rte_zmalloc
to calloc.
Fixes: 44d0a720a538 ("net/iavf: query QoS capabilities and set queue TC mapping")
Fixes: 5779a8894d15 ("net/iavf: support queue rate limit configuration")
Cc: stable@dpdk.org
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
drivers/net/intel/iavf/iavf_tm.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/drivers/net/intel/iavf/iavf_tm.c b/drivers/net/intel/iavf/iavf_tm.c
index e3492ec491..cc5c86b4ce 100644
--- a/drivers/net/intel/iavf/iavf_tm.c
+++ b/drivers/net/intel/iavf/iavf_tm.c
@@ -2,6 +2,7 @@
* Copyright(c) 2010-2017 Intel Corporation
*/
#include <rte_tm_driver.h>
+#include <stdlib.h>
#include "iavf.h"
@@ -795,8 +796,8 @@ static int iavf_hierarchy_commit(struct rte_eth_dev *dev,
struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
struct iavf_adapter *adapter =
IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
- struct virtchnl_queue_tc_mapping *q_tc_mapping;
- struct virtchnl_queues_bw_cfg *q_bw;
+ struct virtchnl_queue_tc_mapping *q_tc_mapping = NULL;
+ struct virtchnl_queues_bw_cfg *q_bw = NULL;
struct iavf_tm_node_list *queue_list = &vf->tm_conf.queue_list;
struct iavf_tm_node *tm_node;
struct iavf_qtc_map *qtc_map;
@@ -832,7 +833,7 @@ static int iavf_hierarchy_commit(struct rte_eth_dev *dev,
size = sizeof(*q_tc_mapping) + sizeof(q_tc_mapping->tc[0]) *
(vf->qos_cap->num_elem - 1);
- q_tc_mapping = rte_zmalloc("q_tc", size, 0);
+ q_tc_mapping = calloc(1, size);
if (!q_tc_mapping) {
ret_val = IAVF_ERR_NO_MEMORY;
goto fail_clear;
@@ -840,7 +841,7 @@ static int iavf_hierarchy_commit(struct rte_eth_dev *dev,
size_q = sizeof(*q_bw) + sizeof(q_bw->cfg[0]) *
(vf->num_queue_pairs - 1);
- q_bw = rte_zmalloc("q_bw", size_q, 0);
+ q_bw = calloc(1, size_q);
if (!q_bw) {
ret_val = IAVF_ERR_NO_MEMORY;
goto fail_clear;
@@ -889,8 +890,10 @@ static int iavf_hierarchy_commit(struct rte_eth_dev *dev,
/* store the queue TC mapping info */
qtc_map = rte_zmalloc("qtc_map",
sizeof(struct iavf_qtc_map) * q_tc_mapping->num_tc, 0);
- if (!qtc_map)
- return IAVF_ERR_NO_MEMORY;
+ if (!qtc_map) {
+ ret_val = IAVF_ERR_NO_MEMORY;
+ goto fail_clear;
+ }
for (i = 0; i < q_tc_mapping->num_tc; i++) {
q_tc_mapping->tc[i].req.start_queue_id = index;
@@ -908,6 +911,8 @@ static int iavf_hierarchy_commit(struct rte_eth_dev *dev,
vf->qtc_map = qtc_map;
if (adapter->stopped == 1)
vf->tm_conf.committed = true;
+ free(q_bw);
+ free(q_tc_mapping);
return ret_val;
fail_clear:
@@ -917,5 +922,7 @@ static int iavf_hierarchy_commit(struct rte_eth_dev *dev,
iavf_tm_conf_init(dev);
}
err:
+ free(q_bw);
+ free(q_tc_mapping);
return ret_val;
}
--
2.53.0
^ permalink raw reply related
* Re: [v8,0/4] net/zxdh: optimize Rx/Tx path performance
From: Junlong Wang @ 2026-07-03 8:17 UTC (permalink / raw)
To: stephen; +Cc: dev
In-Reply-To: <20260625120317.211780-1-wang.junlong1@zte.com.cn>
[-- Attachment #1.1.1: Type: text/plain, Size: 2231 bytes --]
> [PATCH v8 4/4] net/zxdh: optimize Tx xmit pkts performance
>
> Error: the simple Tx burst signals a bad packet with a short return,
> which the application cannot distinguish from backpressure.
> for (i = 0; i < nb_pkts; i++) {
> rte_prefetch0(tx_pkts[i]);
> if (unlikely(tx_pkts[i]->data_off < hdr_len)) {
> txvq->stats.errors += nb_pkts - i;
> nb_pkts = i;
> break;
> }
> }
>
> A short return from tx_burst is the backpressure signal (transmit ring
> full, retry later). Here it is also used to mean "packet i is bad",
> and the bad mbuf is left owned by the caller. The application has no
> way to tell the two apart: the usual
>
> for (sent = 0; sent < n; )
> sent += rte_eth_tx_burst(port, q, &pkts[sent], n - sent);
>
> loop treats the short return as backpressure and resubmits pkts[i],
> which fails again every time -- head-of-line blocking, and the good
> packets after i (which had ring space) never go out.
>
> A packet that cannot be sent must be consumed by the driver, not
> handed back. Free it in tx_burst, increment the tx error counter, and
> continue with the rest of the burst. For a burst of 16 where only
> index 3 is bad and the ring has room, tx_burst should return 16, with
> stats showing 15 transmitted and 1 tx error. A short return is then
> reserved for the one case the application is entitled to retry: ring
> full.
The design intent of zxdh_xmit_pkts_simple is a fast path with
a usage restriction, not a general Tx entry point.
The restriction is data_off >= hdr_len on single-segment
mbufs. When a packet violates the restriction, the function
exits without sending — that is the contract, not a bug.
Applications that may produce reduced-headroom mbufs are
expected to keep RTE_ETH_TX_OFFLOAD_MULTI_SEGS enabled, in
which case zxdh_xmit_pkts_packed is selected instead and
handles the full set of inputs. The split between the two
paths is intentional.
how about add a paragraph to the "Limitations or Known issues"
section of doc/guides/nics/zxdh.rst describing the fast path's
requirement and pointing at the packed path as the alternative.
Thanks.
[-- Attachment #1.1.2: Type: text/html , Size: 4630 bytes --]
^ permalink raw reply
* Re: [PATCH v4] dts: add support for no link topology
From: Luca Vizzarro @ 2026-07-03 7:46 UTC (permalink / raw)
To: Andrew Bailey, patrickrobb1997; +Cc: dev, knimoji, lylavoie, ahassick
In-Reply-To: <20260617193240.149708-1-abailey@iol.unh.edu>
Hi Andrew,
looks good to me! Thanks,
Reviewed-by: Luca Vizzarro <luca.vizzarro@arm.com>
^ permalink raw reply
* Re: [PATCH 0/9] Stability fixes for GVE
From: Stephen Hemminger @ 2026-07-03 4:36 UTC (permalink / raw)
To: Joshua Washington; +Cc: dev
In-Reply-To: <CALuQH+XNRfWpd1zXm9GOe08h3z7DHb=FdV5jOnqGFP4Y5E8q=Q@mail.gmail.com>
On Wed, 1 Jul 2026 12:59:18 -0700
Joshua Washington <joshwash@google.com> wrote:
> On Wed, Jul 1, 2026 at 11:50 AM Stephen Hemminger
> <stephen@networkplumber.org> wrote:
> >
> > On Wed, 1 Jul 2026 11:35:18 -0700
> > Joshua Washington <joshwash@google.com> wrote:
> >
> > > This patch series consists of mostly unrelated fixes in the GVE driver.
> > >
> > > Joshua Washington (9):
> > > net/gve: clear out shared memory region for stats report
> > > net/gve: delay adding mbuf head to software ring
> > > net/gve: copy data to QPL buffer when mbuf read does not
> > > net/gve: validate buf ID before processing Rx packet
> > > net/gve: set mbuf to null in software ring after use
> > > net/gve: free ctx mbuf if packet dropped after first segment
> > > net/gve: increase range of DMA memzone ids to 64 bits
> > > net/gve: don't reset ring size bounds to default on reset
> > > net/gve: restrict max ring size in GQ QPL to 2K
> > >
> > > drivers/net/gve/base/gve_adminq.c | 12 ++++++---
> > > drivers/net/gve/base/gve_osdep.h | 4 +--
> > > drivers/net/gve/gve_ethdev.c | 8 +++---
> > > drivers/net/gve/gve_ethdev.h | 1 +
> > > drivers/net/gve/gve_rx.c | 3 +++
> > > drivers/net/gve/gve_rx_dqo.c | 6 +++++
> > > drivers/net/gve/gve_tx.c | 42 +++++++++++++++++++------------
> > > 7 files changed, 52 insertions(+), 24 deletions(-)
> > >
> >
> > *Build Failed #1:
> > OS: OpenAnolis8.10-64
> > Target: x86_64-native-linuxapp-gcc
> > FAILED: drivers/libtmp_rte_net_gve.a.p/net_gve_gve_tx.c.o
> > gcc -Idrivers/libtmp_rte_net_gve.a.p -Idrivers -I../drivers -Idrivers/net/gve -I../drivers/net/gve -I../drivers/net/gve/base -Ilib/ethdev -I../lib/ethdev -Ilib/eal/common -I../lib/eal/common -I. -I.. -Iconfig -I../config -Ilib/eal/include -I../lib/eal/include -Ilib/eal/linux/include -I../lib/eal/linux/include -Ilib/eal/x86/include -I../lib/eal/x86/include -I../kernel/linux -Ilib/eal -I../lib/eal -Ilib/kvargs -I../lib/kvargs -Ilib/log -I../lib/log -Ilib/metrics -I../lib/metrics -Ilib/telemetry -I../lib/telemetry -Ilib/argparse -I../lib/argparse -Ilib/net -I../lib/net -Ilib/mbuf -I../lib/mbuf -Ilib/mempool -I../lib/mempool -Ilib/ring -I../lib/ring -Ilib/meter -I../lib/meter -Idrivers/bus/pci -I../drivers/bus/pci -I../drivers/bus/pci/linux -Ilib/pci -I../lib/pci -Idrivers/bus/vdev -I../drivers/bus/vdev -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Werror -std=c11 -O3 -include rte_config.h -Wvla -Wcast-qual -Wdeprecated -Wformat -Wformat-nonliteral -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wpointer-arith -Wshadow -Wsign-compare -Wstrict-prototypes -Wundef -Wwrite-strings -Wno-packed-not-aligned -Wno-missing-field-initializers -D_GNU_SOURCE -fPIC -march=native -mrtm -DALLOW_EXPERIMENTAL_API -DALLOW_INTERNAL_API -Wno-format-truncation -Wno-vla -DRTE_COMPONENT_CLASS=pmd_net -DRTE_COMPONENT_NAME=gve -DRTE_LOG_DEFAULT_LOGTYPE=pmd.net.gve -MD -MQ drivers/libtmp_rte_net_gve.a.p/net_gve_gve_tx.c.o -MF drivers/libtmp_rte_net_gve.a.p/net_gve_gve_tx.c.o.d -o drivers/libtmp_rte_net_gve.a.p/net_gve_gve_tx.c.o -c ../drivers/net/gve/gve_tx.c
> > ../drivers/net/gve/gve_tx.c: In function ‘gve_tx_burst_qpl’:
> > ../drivers/net/gve/gve_tx.c:258:21: error: variable ‘addr’ set but not used [-Werror=unused-but-set-variable]
> > uint64_t ol_flags, addr, fifo_addr;
> > ^~~~
> > cc1: all warnings being treated as errors
> > [1640/3750] Compiling C object drivers/libtmp_rte_net_gve.a.p/net_gve_gve_rx.c.o
> > [1641/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_base_hinic_pmd_cfg.c.o
> > [1642/3750] Compiling C object drivers/libtmp_rte_net_failsafe.a.p/net_failsafe_failsafe_ops.c.o
> > [1643/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_base_hinic_pmd_api_cmd.c.o
> > [1644/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_base_hinic_pmd_cmdq.c.o
> > [1645/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_hinic_pmd_rx.c.o
> > [1646/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_hinic_pmd_flow.c.o
> > [1647/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_hinic_pmd_ethdev.c.o
> > [1648/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_hinic_pmd_tx.c.o
> > ninja: build stopped
>
> Will fix in v2.
Here is AI review if it helps
Review of "net/gve" 9-patch series (bundle 1995)
Applied cleanly on top of 26.07-rc2 and built with
meson -Dbuildtype=minsize -Ddefault_library=static -Dwerror=true
The series is a solid set of datapath and reset-path bug fixes. One patch
breaks the build on its own, which blocks the series until fixed.
Patch 3/9 (net/gve: copy data to QPL buffer when mbuf read does not)
Error: build failure. Removing the two rte_memcpy() calls that consumed
'addr' leaves 'addr' set but never read, so the driver no longer compiles
under -Werror:
gve_tx.c: In function 'gve_tx_burst_qpl':
gve_tx.c:258:28: error: variable 'addr' set but not used
[-Werror=unused-but-set-variable]
Both remaining assignments are now dead:
addr = (uint64_t)(tx_pkt->buf_addr) + tx_pkt->data_off;
...
addr = (uint64_t)(tx_pkt->buf_addr) + tx_pkt->data_off + hlen;
Drop 'addr' from the declaration and delete both assignments. This also
means each commit does not build independently, breaking git bisect.
The fix itself is correct: rte_pktmbuf_read() returns a pointer into the
mbuf when the range is contiguous and does not touch the destination, so
the guarded rte_memcpy() is needed for both the header and the TSO
payload copy.
Patch 9/9 (net/gve: restrict max ring size in GQ QPL to 2K)
Info: the new include uses quotes,
#include "rte_common.h"
but every other DPDK header in this driver (including base/gve_osdep.h)
uses angle brackets. Prefer:
#include <rte_common.h>
The GQ-QPL RTE_MIN() cap and the DQO override refactor are correct; the
initial device-value assignment that DQO overwrites is an intentional
default, not a dead store.
Patches 1, 2, 4, 5, 6, 7, 8: no issues found.
- 2/9: sw_ring record loop advances sw_id by nb_segs exactly as before;
the added !tx_pkt guard is a safe bound.
- 4/9: buf_id bound check sits after the completion descriptor is
consumed (rx_id / nb_rx_hold / generation advanced), so a bad id is
dropped without stalling the ring.
- 5/9 + 6/9: nulling sw_ring after handing the mbuf to the application
and freeing ctx->mbuf_head on drop are consistent - the head chain is
removed from sw_ring before being freed, so no double free, and refill
overwrites the slots with freshly allocated mbufs.
No Reviewed-by given: patch 3 does not build. Once the unused 'addr' is
removed I'm happy to ack the series.
^ permalink raw reply
* Re: [PATCH v2 1/5] examples/l3fwd-power: fix uncore deinit for non-legacy
From: lihuisong (C) @ 2026-07-03 4:07 UTC (permalink / raw)
To: Macnamara, Chris, anatoly.burakov, sivaprasad.tummala
Cc: dev, thomas, stephen, fengchengwen, yangxingui, zhanjie9,
john.mcnamara, lihuisong
In-Reply-To: <6df97f76-27d7-49f2-8d23-30601c12ca0a@intel.com>
Hi Macnamara,
Thanks for your review.
On 7/2/2026 7:06 PM, Macnamara, Chris wrote:
>> Uncore resources were not being deinitialized in non-legacy modes (such
>> as pmd-mgmt), causing the uncore frequency not to return to its original
>> value after the application exited.
>>
>> The root cause is that uncore initialization can be performed for all
>> modes, whereas the deinitialization logic is incorrectly restricted
>> to legacy mode only. So do the deinitialization of uncore on all app
>> modes.
>>
>> Fixes: 10db2a5b8724 ("examples/l3fwd-power: add options for uncore
>> frequency")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Huisong Li <lihuisong@huawei.com>
>> ---
>> examples/l3fwd-power/main.c | 66 ++++++++++++++++++++-----------------
>> 1 file changed, 35 insertions(+), 31 deletions(-)
>>
>> diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
>> index 02ec17d799..1122aeb930 100644
>> --- a/examples/l3fwd-power/main.c
>> +++ b/examples/l3fwd-power/main.c
>> @@ -2271,28 +2271,31 @@ init_power_library(void)
>> unsigned int lcore_id;
>> int ret = 0;
>> - RTE_LCORE_FOREACH(lcore_id) {
>> - /* init power management library */
>> - ret = rte_power_init(lcore_id);
>> - if (ret) {
>> - RTE_LOG(ERR, L3FWD_POWER,
>> - "Library initialization failed on core %u\n",
>> - lcore_id);
>> - return ret;
>> - }
>> - /* we're not supporting the VM channel mode */
>> - env = rte_power_get_env();
>> - if (env != PM_ENV_ACPI_CPUFREQ &&
>> - env != PM_ENV_PSTATE_CPUFREQ &&
>> - env != PM_ENV_AMD_PSTATE_CPUFREQ &&
>> - env != PM_ENV_CPPC_CPUFREQ) {
>> - RTE_LOG(ERR, L3FWD_POWER,
>> - "Only ACPI and PSTATE mode are supported\n");
>> - return -1;
>> + /* only legacy mode relies on the initialization of cpufreq
>> library */
>> + if (app_mode == APP_MODE_LEGACY) {
>> + RTE_LCORE_FOREACH(lcore_id) {
>> + /* init power management library */
>> + ret = rte_power_init(lcore_id);
>> + if (ret) {
>> + RTE_LOG(ERR, L3FWD_POWER,
>> + "Library initialization failed on core %u\n",
>> + lcore_id);
>> + return ret;
>> + }
>> + /* we're not supporting the VM channel mode */
>> + env = rte_power_get_env();
>> + if (env != PM_ENV_ACPI_CPUFREQ &&
>> + env != PM_ENV_PSTATE_CPUFREQ &&
>> + env != PM_ENV_AMD_PSTATE_CPUFREQ &&
>> + env != PM_ENV_CPPC_CPUFREQ) {
>> + RTE_LOG(ERR, L3FWD_POWER,
>> + "Only ACPI and PSTATE mode are supported\n");
>> + return -1;
>> + }
>> }
>> }
>> - if (cpu_resume_latency != -1) {
>> + if (app_mode == APP_MODE_LEGACY && cpu_resume_latency != -1) {
>> RTE_LCORE_FOREACH(lcore_id) {
>> /* Back old CPU resume latency. */
>> ret = rte_power_qos_get_cpu_resume_latency(lcore_id);
>> @@ -2329,14 +2332,16 @@ deinit_power_library(void)
>> unsigned int lcore_id, max_pkg, max_die, die, pkg;
>> int ret = 0;
>> - RTE_LCORE_FOREACH(lcore_id) {
>> - /* deinit power management library */
>> - ret = rte_power_exit(lcore_id);
>> - if (ret) {
>> - RTE_LOG(ERR, L3FWD_POWER,
>> - "Library deinitialization failed on core %u\n",
>> - lcore_id);
>> - return ret;
>> + if (app_mode == APP_MODE_LEGACY) {
>> + RTE_LCORE_FOREACH(lcore_id) {
>> + /* deinit power management library */
>> + ret = rte_power_exit(lcore_id);
>> + if (ret) {
>> + RTE_LOG(ERR, L3FWD_POWER,
>> + "Library deinitialization failed on core %u\n",
>> + lcore_id);
>> + return ret;
>> + }
>> }
>> }
>> @@ -2360,7 +2365,7 @@ deinit_power_library(void)
>> }
>> }
>> - if (cpu_resume_latency != -1) {
>> + if (app_mode == APP_MODE_LEGACY && cpu_resume_latency != -1) {
>> RTE_LCORE_FOREACH(lcore_id) {
>> /* Restore the original value. */
>> rte_power_qos_set_cpu_resume_latency(lcore_id,
>
> Agree there is an issue with uncore deinit.
>
> cpu_resume_latency & init_power_library: After this patch,
> cpu_resume_latency (for C-state PM QoS control) is gated behind
> APP_MODE_LEGACY even though it's orthogonal to the cpufreq library, so
> it's silently ignored in pmd-mgmt/interrupt modes. It’s used for C
> state management which applies in other modes such as interrupt mode.
Yeah, so patch 2/5 lets PM QoS can be used for all mode.
>
> Also init_power_library() now has both its blocks legacy-guarded
> internally, the newly-unconditional call by removing APP_MODE_LEGACY
> to it is a no-op in non-legacy modes. This leaves the two functions
> inconsistent: init_power_library() does nothing outside legacy mode,
> whereas deinit_power_library() still has real work to do in every mode
> because of the uncore cleanup.
Yes, use this method to deinitialize the uncore.
Currently, the initialization of uncore is located in the parameter
parsing function, which lead to the inconsistent.
>
> Consider, keep the APP_MODE_LEGACY guard at the init call site as the
> init is truly legacy only or split the uncore teardown into its own
> deinit_uncore() so that deinit_power_library() stays strictly about
> cpufreq.
This patch doesn't plan to change the original logical about uncore.
The initialization or deinitialization of all power libs is completed in
the same function. It is good to user.
And patch 4/5 is doing this.
In addition, I think the initialization for power libs is a little
scattered in usage.
I am thinking how to simply these initializations for user.
For example, fill a configuration about power then call one power_init
ops to complete all initialization.
Anyway, the current changes being made are also beneficial for this matter.
>
>
^ permalink raw reply
* [PATCH] test/bpf: remove validation tests from CI
From: Thomas Monjalon @ 2026-07-03 2:27 UTC (permalink / raw)
To: dev; +Cc: Konstantin Ananyev, Marat Khalili
The new tests for BPF validation are triggering a strange issue
in GitHub Action: the last tests are killed by signal 7 SIGBUS.
The series fixing a lot of BPF issues was merged
but the related test has to be removed from the fast tests suite
which runs in some CI jobs.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
app/test/test_bpf_validate.c | 58 ++++++++++++++++++------------------
1 file changed, 29 insertions(+), 29 deletions(-)
diff --git a/app/test/test_bpf_validate.c b/app/test/test_bpf_validate.c
index 3f6747eaf6..fafd5d27f5 100644
--- a/app/test/test_bpf_validate.c
+++ b/app/test/test_bpf_validate.c
@@ -1291,7 +1291,7 @@ test_alu64_add_k(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_add_k_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_add_k_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_add_k);
/* 64-bit addition of immediate to a pointer range. */
@@ -1309,7 +1309,7 @@ test_alu64_add_k_pointer(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_add_k_pointer_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_add_k_pointer_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_add_k_pointer);
/* 64-bit addition of pointer to a pointer. */
@@ -1327,7 +1327,7 @@ test_alu64_add_x_pointer_pointer(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_add_x_pointer_pointer_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_add_x_pointer_pointer_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_add_x_pointer_pointer);
/* 64-bit addition of scalar to a pointer. */
@@ -1345,7 +1345,7 @@ test_alu64_add_x_pointer_scalar(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_add_x_pointer_scalar_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_add_x_pointer_scalar_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_add_x_pointer_scalar);
/* 64-bit addition of pointer to a scalar. */
@@ -1363,7 +1363,7 @@ test_alu64_add_x_scalar_pointer(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_add_x_scalar_pointer_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_add_x_scalar_pointer_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_add_x_scalar_pointer);
/* 64-bit addition of scalar to a scalar. */
@@ -1381,7 +1381,7 @@ test_alu64_add_x_scalar_scalar(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_add_x_scalar_scalar_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_add_x_scalar_scalar_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_add_x_scalar_scalar);
/* 64-bit bitwise AND between a scalar range and immediate. */
@@ -1398,7 +1398,7 @@ test_alu64_and_k(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_and_k_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_and_k_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_and_k);
/* 64-bit division and modulo of UINT64_MAX*2/3. */
@@ -1442,7 +1442,7 @@ test_alu64_div_mod_big_constant(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_alu64_div_mod_big_constant_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_div_mod_big_constant_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_div_mod_big_constant);
/* 64-bit division and modulo of UINT64_MAX/3..UINT64_MAX*2/3 by a constant. */
@@ -1487,7 +1487,7 @@ test_alu64_div_mod_big_range(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_alu64_div_mod_big_range_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_div_mod_big_range_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_div_mod_big_range);
/* 64-bit division and modulo of INT64_MIN by -1. */
@@ -1533,7 +1533,7 @@ test_alu64_div_mod_overflow(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_alu64_div_mod_overflow_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_div_mod_overflow_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_div_mod_overflow);
/* 64-bit left shift by 63. */
@@ -1550,7 +1550,7 @@ test_alu64_lsh_63(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_lsh_63_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_lsh_63_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_lsh_63);
/* 64-bit multiplication of constant and immediate with overflow. */
@@ -1567,7 +1567,7 @@ test_alu64_mul_k_overflow(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_mul_k_overflow_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_mul_k_overflow_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_mul_k_overflow);
/* 64-bit mul of small scalar range and immediate. */
@@ -1584,7 +1584,7 @@ test_alu64_mul_k_range_small(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_mul_k_range_small_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_mul_k_range_small_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_mul_k_range_small);
/* 64-bit negation when interval first element is INT64_MIN. */
@@ -1618,7 +1618,7 @@ test_alu64_neg_int64min_first(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_alu64_neg_int64min_first_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_neg_int64min_first_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_neg_int64min_first);
/* 64-bit negation when interval last element is INT64_MIN. */
@@ -1647,7 +1647,7 @@ test_alu64_neg_int64min_last(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_alu64_neg_int64min_last_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_neg_int64min_last_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_neg_int64min_last);
/* 64-bit negation when interval first element is zero. */
@@ -1681,7 +1681,7 @@ test_alu64_neg_zero_first(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_alu64_neg_zero_first_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_neg_zero_first_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_neg_zero_first);
/* 64-bit negation when interval last element is zero. */
@@ -1710,7 +1710,7 @@ test_alu64_neg_zero_last(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_alu64_neg_zero_last_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_neg_zero_last_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_neg_zero_last);
/* 64-bit bitwise OR between a positive scalar range and negative immediate. */
@@ -1727,7 +1727,7 @@ test_alu64_or_k_negative(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_or_k_negative_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_or_k_negative_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_or_k_negative);
/* 64-bit bitwise OR between a positive scalar range and positive immediate. */
@@ -1744,7 +1744,7 @@ test_alu64_or_k_positive(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_or_k_positive_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_or_k_positive_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_or_k_positive);
/* 64-bit difference between two negative ranges.. */
@@ -1761,7 +1761,7 @@ test_alu64_sub_x_src_signed_max_zero(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_sub_x_src_signed_max_zero_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_sub_x_src_signed_max_zero_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_sub_x_src_signed_max_zero);
/* 64-bit bitwise XOR between a negative scalar range and zero immediate. */
@@ -1778,7 +1778,7 @@ test_alu64_xor_k_negative(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_alu64_xor_k_negative_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_alu64_xor_k_negative_autotest, NOHUGE_OK, ASAN_OK,
test_alu64_xor_k_negative);
/* Jump if greater than immediate. */
@@ -1796,7 +1796,7 @@ test_jmp64_jeq_k(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_jmp64_jeq_k_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_jmp64_jeq_k_autotest, NOHUGE_OK, ASAN_OK,
test_jmp64_jeq_k);
/* Jump if signed less than another register. */
@@ -1814,7 +1814,7 @@ test_jmp64_jslt_x(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_jmp64_jslt_x_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_jmp64_jslt_x_autotest, NOHUGE_OK, ASAN_OK,
test_jmp64_jslt_x);
/* Jump on ordering comparisons with potential bound overflow. */
@@ -1863,7 +1863,7 @@ test_jmp64_ordering_overflow(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_jmp64_ordering_overflow_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_jmp64_ordering_overflow_autotest, NOHUGE_OK, ASAN_OK,
test_jmp64_ordering_overflow);
/* Jump on ordering comparisons between two ranges. */
@@ -2022,7 +2022,7 @@ test_jmp64_ordering_ranges(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_jmp64_ordering_ranges_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_jmp64_ordering_ranges_autotest, NOHUGE_OK, ASAN_OK,
test_jmp64_ordering_ranges);
/* Jump on ordering comparisons with singleton inside the range. */
@@ -2080,7 +2080,7 @@ test_jmp64_ordering_singleton_inside(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_jmp64_ordering_singleton_inside_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_jmp64_ordering_singleton_inside_autotest, NOHUGE_OK, ASAN_OK,
test_jmp64_ordering_singleton_inside);
/* Jump on ordering comparisons with singleton outside the range. */
@@ -2175,7 +2175,7 @@ test_jmp64_ordering_singleton_outside(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_jmp64_ordering_singleton_outside_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_jmp64_ordering_singleton_outside_autotest, NOHUGE_OK, ASAN_OK,
test_jmp64_ordering_singleton_outside);
/* Jump on ordering comparisons with ranges "touching" each other. */
@@ -2249,7 +2249,7 @@ test_jmp64_ordering_touching(void)
return TEST_SUCCESS;
}
-REGISTER_FAST_TEST(bpf_validate_jmp64_ordering_touching_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_jmp64_ordering_touching_autotest, NOHUGE_OK, ASAN_OK,
test_jmp64_ordering_touching);
/* 64-bit load from heap (should be set to unknown). */
@@ -2267,5 +2267,5 @@ test_mem_ldx_dw_heap(void)
});
}
-REGISTER_FAST_TEST(bpf_validate_mem_ldx_dw_heap_autotest, NOHUGE_OK, ASAN_OK,
+REGISTER_ATTIC_TEST(bpf_validate_mem_ldx_dw_heap_autotest, NOHUGE_OK, ASAN_OK,
test_mem_ldx_dw_heap);
--
2.54.0
^ permalink raw reply related
* Re: [PATCH v5 00/24] bpf: test and fix issues in verifier
From: Thomas Monjalon @ 2026-07-03 1:13 UTC (permalink / raw)
To: Marat Khalili; +Cc: dev
In-Reply-To: <20260624121800.40635-1-marat.khalili@huawei.com>
> Marat Khalili (24):
> bpf: format and dump jlt, jle, jslt, and jsle
> bpf: add format instruction function
> bpf/validate: break on error in evaluate
> bpf/validate: expand comments in evaluate cycle
> bpf/validate: introduce debugging interface
> bpf/validate: fix BPF_ADD of pointer to a scalar
> bpf/validate: fix BPF_LDX | EBPF_DW signed range
> test/bpf_validate: add setup and basic tests
> test/bpf_validate: add harness for pointer tests
> bpf/validate: fix EBPF_JSLT | BPF_X evaluation
> bpf/validate: fix BPF_NEG of INT64_MIN and 0
> bpf/validate: fix BPF_DIV and BPF_MOD signed part
> bpf/validate: fix BPF_MUL ranges minimum typo
> bpf/validate: fix BPF_MUL signed overflow UB
> bpf/validate: fix BPF_JGT/EBPF_JSGT no-jump max
> bpf/validate: fix BPF_JMP source range calculation
> bpf/validate: fix BPF_JMP empty range handling
> bpf/validate: fix BPF_AND min calculations
> bpf/validate: fix BPF_LSH shift-out-of-bounds UB
> bpf/validate: fix BPF_OR min calculations
> bpf/validate: fix BPF_SUB signed max zero case
> bpf/validate: fix BPF_XOR signed min calculation
> bpf/validate: prevent overflow when building graph
> doc: add release notes for BPF validation fixes
Applied, thanks.
^ permalink raw reply
* Re: [PATCH] test/pcapng: add some leeway to timestamp test
From: Thomas Monjalon @ 2026-07-02 21:08 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: dev, Reshma Pattan
In-Reply-To: <20260701223702.105995-1-stephen@networkplumber.org>
02/07/2026 00:37, Stephen Hemminger:
> The timestamp test sometimes fails on busy or emulated CPU's
> add additional slop to allow timestamp to be up to 1 second
> after capture was stopped.
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Applied, thanks.
^ permalink raw reply
* Re: [PATCH v3 0/8] ip_frag: fix reassembly defects and add test
From: Thomas Monjalon @ 2026-07-02 20:55 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: dev
In-Reply-To: <20260701162127.207318-1-stephen@networkplumber.org>
01/07/2026 18:20, Stephen Hemminger:
> The IP reassembly library tracks only a running byte total and reserved
> slots for the first and last fragments, with no coverage map. As a result
> it mishandles duplicate, overlapping, oversized, and misheadered
> fragments, and the IPv4 key is missing a field RFC 791 requires. There
> was also no functional test to catch any of it.
>
> These came out of reviewing a duplicate-fragment report on the list.
>
> Patches 1 and 2 are interdependent: the overlap discard relies on the
> duplicate handling so an exact duplicate is dropped on its own rather
> than discarding the whole datagram. The rest are independent.
>
> Patch 6 adds a functional test modeled on the Linux selftest ip_defrag.c.
> It passes on this series; with any single fix reverted the matching case
> fails.
>
> v3 - drop stable from one patch and reword release note
>
> Stephen Hemminger (8):
> ip_frag: tolerate duplicate fragments
> ip_frag: discard datagrams with overlapping fragments
> ip_frag: include protocol in IPv4 reassembly key
> ip_frag: drop IPv6 fragments with per-fragment headers
> ip_frag: reject oversized reassembled datagrams
> app/test: add test for IP reassembly
> ip_frag: remove use of rte_memcpy
> doc: add release note about ip_frag changes
doc squashed in relevant commits atomically,
applied, thanks.
^ permalink raw reply
* [PATCH 7/7] doc: add missing headers to doxy-api-index.md
From: Marat Khalili @ 2026-07-02 20:00 UTC (permalink / raw)
Cc: dev, thomas, bruce.richardson
In-Reply-To: <20260702200050.88710-1-marat.khalili@huawei.com>
Make sure all public headers are listed in `doxy-api-index.md` to be
reachable in HTML version. Presumably each of them should contain at
least a general file description, though this is not checked now.
The only header still omitted is rte_pmd_bphy.h since it needs writing
multiple new doxygen descriptions which could not be done on the spot,
so it is excluded from the build (tracked by bug 1962 in bugzilla).
Signed-off-by: Marat Khalili <marat.khalili@huawei.com>
---
doc/api/doxy-api-index.md | 116 +++++++++++++++++++++++++++++++++-----
1 file changed, 102 insertions(+), 14 deletions(-)
diff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md
index 929604211946..db7aeccd4e30 100644
--- a/doc/api/doxy-api-index.md
+++ b/doc/api/doxy-api-index.md
@@ -9,14 +9,24 @@ API
The public API headers are grouped by topics:
- **device**:
+ [bus](@ref rte_bus.h),
[dev](@ref rte_dev.h),
[ethdev](@ref rte_ethdev.h),
+ [cman](@ref rte_cman.h),
+ [ethdev trace fp](@ref rte_ethdev_trace_fp.h),
+ [dev info](@ref rte_dev_info.h),
[ethctrl](@ref rte_eth_ctrl.h),
[rte_flow](@ref rte_flow.h),
[rte_tm](@ref rte_tm.h),
[rte_mtr](@ref rte_mtr.h),
[bbdev](@ref rte_bbdev.h),
+ [bbdev op](@ref rte_bbdev_op.h),
+ [bbdev trace fp](@ref rte_bbdev_trace_fp.h),
[cryptodev](@ref rte_cryptodev.h),
+ [crypto](@ref rte_crypto.h),
+ [crypto sym](@ref rte_crypto_sym.h),
+ [crypto asym](@ref rte_crypto_asym.h),
+ [cryptodev trace fp](@ref rte_cryptodev_trace_fp.h),
[security](@ref rte_security.h),
[compressdev](@ref rte_compressdev.h),
[compress](@ref rte_comp.h),
@@ -25,6 +35,8 @@ The public API headers are grouped by topics:
[dmadev](@ref rte_dmadev.h),
[gpudev](@ref rte_gpudev.h),
[eventdev](@ref rte_eventdev.h),
+ [event ring](@ref rte_event_ring.h),
+ [eventdev trace fp](@ref rte_eventdev_trace_fp.h),
[event_eth_rx_adapter](@ref rte_event_eth_rx_adapter.h),
[event_eth_tx_adapter](@ref rte_event_eth_tx_adapter.h),
[event_timer_adapter](@ref rte_event_timer_adapter.h),
@@ -33,17 +45,27 @@ The public API headers are grouped by topics:
[event_vector_adapter](@ref rte_event_vector_adapter.h),
[rawdev](@ref rte_rawdev.h),
[metrics](@ref rte_metrics.h),
+ [metrics telemetry](@ref rte_metrics_telemetry.h),
[bitrate](@ref rte_bitrate.h),
[latency](@ref rte_latencystats.h),
[devargs](@ref rte_devargs.h),
[PCI](@ref rte_pci.h),
+ [PCI dev feature defs](@ref rte_pci_dev_feature_defs.h),
+ [PCI dev features](@ref rte_pci_dev_features.h),
+ [bus PCI](@ref rte_bus_pci.h),
[vdev](@ref rte_bus_vdev.h),
+ [vmbus](@ref rte_bus_vmbus.h),
+ [vmbus reg](@ref rte_vmbus_reg.h),
[vfio](@ref rte_vfio.h)
- **device specific**:
[softnic](@ref rte_eth_softnic.h),
[bond](@ref rte_eth_bond.h),
+ [bond 8023ad](@ref rte_eth_bond_8023ad.h),
[vhost](@ref rte_vhost.h),
+ [vhost async](@ref rte_vhost_async.h),
+ [vhost crypto](@ref rte_vhost_crypto.h),
+ [eth vhost](@ref rte_eth_vhost.h),
[vdpa](@ref rte_vdpa.h),
[ixgbe](@ref rte_pmd_ixgbe.h),
[i40e](@ref rte_pmd_i40e.h),
@@ -53,6 +75,7 @@ The public API headers are grouped by topics:
[cnxk_crypto](@ref rte_pmd_cnxk_crypto.h),
[cnxk_eventdev](@ref rte_pmd_cnxk_eventdev.h),
[cnxk_mempool](@ref rte_pmd_cnxk_mempool.h),
+ [cnxk gpio](@ref rte_pmd_cnxk_gpio.h),
[dpaa](@ref rte_pmd_dpaa.h),
[dpaa2](@ref rte_pmd_dpaa2.h),
[mlx5](@ref rte_pmd_mlx5.h),
@@ -60,25 +83,40 @@ The public API headers are grouped by topics:
[dpaa2_cmdif](@ref rte_pmd_dpaa2_cmdif.h),
[dpaax_qdma](@ref rte_pmd_dpaax_qdma.h),
[crypto_scheduler](@ref rte_cryptodev_scheduler.h),
+ [crypto scheduler operations](@ref rte_cryptodev_scheduler_operations.h),
[dlb2](@ref rte_pmd_dlb2.h),
- [ifpga](@ref rte_pmd_ifpga.h)
+ [ifpga](@ref rte_pmd_ifpga.h),
+ [avp common](@ref rte_avp_common.h),
+ [avp fifo](@ref rte_avp_fifo.h),
+ [ntnic](@ref rte_pmd_ntnic.h),
+ [ring](@ref rte_eth_ring.h),
+ [txgbe](@ref rte_pmd_txgbe.h),
+ [ntb](@ref rte_pmd_ntb.h),
+ [acc cfg](@ref rte_acc_cfg.h),
+ [acc common cfg](@ref rte_acc_common_cfg.h),
+ [fpga 5gnr fec](@ref rte_pmd_fpga_5gnr_fec.h)
- **memory**:
[per-lcore](@ref rte_per_lcore.h),
[lcore variables](@ref rte_lcore_var.h),
+ [EAL memconfig](@ref rte_eal_memconfig.h),
[memseg](@ref rte_memory.h),
[memzone](@ref rte_memzone.h),
[mempool](@ref rte_mempool.h),
+ [mempool trace fp](@ref rte_mempool_trace_fp.h),
[malloc](@ref rte_malloc.h),
[memcpy](@ref rte_memcpy.h)
- **timers**:
[cycles](@ref rte_cycles.h),
+ [time](@ref rte_time.h),
[timer](@ref rte_timer.h),
[alarm](@ref rte_alarm.h)
- **locks**:
[atomic](@ref rte_atomic.h),
+ [stdatomic](@ref rte_stdatomic.h),
+ [lock annotations](@ref rte_lock_annotations.h),
[mcslock](@ref rte_mcslock.h),
[pflock](@ref rte_pflock.h),
[rwlock](@ref rte_rwlock.h),
@@ -103,13 +141,18 @@ The public API headers are grouped by topics:
[launch](@ref rte_launch.h),
[lcore](@ref rte_lcore.h),
[service cores](@ref rte_service.h),
+ [service component](@ref rte_service_component.h),
[keepalive](@ref rte_keepalive.h),
[power/freq](@ref rte_power_cpufreq.h),
[power/uncore](@ref rte_power_uncore.h),
- [PMD power](@ref rte_power_pmd_mgmt.h)
+ [PMD power](@ref rte_power_pmd_mgmt.h),
+ [power guest channel](@ref rte_power_guest_channel.h),
+ [power qos](@ref rte_power_qos.h)
- **layers**:
[ethernet](@ref rte_ether.h),
+ [net](@ref rte_net.h),
+ [net CRC](@ref rte_net_crc.h),
[MACsec](@ref rte_macsec.h),
[ARP](@ref rte_arp.h),
[HIGIG](@ref rte_higig.h),
@@ -119,6 +162,7 @@ The public API headers are grouped by topics:
[IPsec group](@ref rte_ipsec_group.h),
[IPsec SA](@ref rte_ipsec_sa.h),
[IPsec SAD](@ref rte_ipsec_sad.h),
+ [IP](@ref rte_ip.h),
[IPv4](@ref rte_ip4.h),
[IPv6](@ref rte_ip6.h),
[frag/reass](@ref rte_ip_frag.h),
@@ -139,12 +183,15 @@ The public API headers are grouped by topics:
[PDCP](@ref rte_pdcp.h),
[L2TPv2](@ref rte_l2tpv2.h),
[PPP](@ref rte_ppp.h),
- [IB](@ref rte_ib.h)
+ [IB](@ref rte_ib.h),
+ [PTP](@ref rte_ptp.h)
- **QoS**:
[metering](@ref rte_meter.h),
[scheduler](@ref rte_sched.h),
- [RED congestion](@ref rte_red.h)
+ [sched common](@ref rte_sched_common.h),
+ [RED congestion](@ref rte_red.h),
+ [PIE](@ref rte_pie.h)
- **routing**:
[LPM IPv4 route](@ref rte_lpm.h),
@@ -168,18 +215,26 @@ The public API headers are grouped by topics:
[distributor](@ref rte_distributor.h),
[EFD](@ref rte_efd.h),
[ACL](@ref rte_acl.h),
+ [ACL osdep](@ref rte_acl_osdep.h),
[member](@ref rte_member.h),
- [BPF](@ref rte_bpf.h)
+ [BPF](@ref rte_bpf.h),
+ [BPF def](@ref bpf_def.h),
+ [BPF ethdev](@ref rte_bpf_ethdev.h)
- **containers**:
[mbuf](@ref rte_mbuf.h),
+ [mbuf core](@ref rte_mbuf_core.h),
+ [mbuf ptype](@ref rte_mbuf_ptype.h),
+ [mbuf dyn](@ref rte_mbuf_dyn.h),
+ [mbuf history](@ref rte_mbuf_history.h),
[mbuf pool ops](@ref rte_mbuf_pool_ops.h),
[ring](@ref rte_ring.h),
[soring](@ref rte_soring.h),
[stack](@ref rte_stack.h),
[tailq](@ref rte_tailq.h),
[bitset](@ref rte_bitset.h),
- [bitmap](@ref rte_bitmap.h)
+ [bitmap](@ref rte_bitmap.h),
+ [fbarray](@ref rte_fbarray.h)
- **packet framework**:
* [port](@ref rte_port.h):
@@ -188,21 +243,28 @@ The public API headers are grouped by topics:
[frag](@ref rte_port_frag.h),
[reass](@ref rte_port_ras.h),
[sched](@ref rte_port_sched.h),
- [src/sink](@ref rte_port_source_sink.h)
+ [src/sink](@ref rte_port_source_sink.h),
+ [fd](@ref rte_port_fd.h),
+ [sym crypto](@ref rte_port_sym_crypto.h),
+ [eventdev](@ref rte_port_eventdev.h)
* [table](@ref rte_table.h):
[lpm IPv4](@ref rte_table_lpm.h),
[lpm IPv6](@ref rte_table_lpm_ipv6.h),
[ACL](@ref rte_table_acl.h),
[hash](@ref rte_table_hash.h),
[array](@ref rte_table_array.h),
- [stub](@ref rte_table_stub.h)
+ [stub](@ref rte_table_stub.h),
+ [LRU](@ref rte_lru.h),
+ [hash cuckoo](@ref rte_table_hash_cuckoo.h),
+ [hash func](@ref rte_table_hash_func.h)
* [pipeline](@ref rte_pipeline.h)
[port_in_action](@ref rte_port_in_action.h)
[table_action](@ref rte_table_action.h)
* SWX pipeline:
[control](@ref rte_swx_ctl.h),
[extern](@ref rte_swx_extern.h),
- [pipeline](@ref rte_swx_pipeline.h)
+ [pipeline](@ref rte_swx_pipeline.h),
+ [IPsec](@ref rte_swx_ipsec.h)
* SWX port:
[port](@ref rte_swx_port.h),
[ethdev](@ref rte_swx_port_ethdev.h),
@@ -211,8 +273,11 @@ The public API headers are grouped by topics:
[src/sink](@ref rte_swx_port_source_sink.h)
* SWX table:
[table](@ref rte_swx_table.h),
- [table_em](@ref rte_swx_table_em.h)
- [table_wm](@ref rte_swx_table_wm.h)
+ [table_em](@ref rte_swx_table_em.h),
+ [table_wm](@ref rte_swx_table_wm.h),
+ [hash func](@ref rte_swx_hash_func.h),
+ [table learner](@ref rte_swx_table_learner.h),
+ [table selector](@ref rte_swx_table_selector.h)
* [graph](@ref rte_graph.h):
[graph_worker](@ref rte_graph_worker.h),
[graph_feature_arc](@ref rte_graph_feature_arc.h),
@@ -222,7 +287,22 @@ The public API headers are grouped by topics:
[ip4_node](@ref rte_node_ip4_api.h),
[ip6_node](@ref rte_node_ip6_api.h),
[udp4_input_node](@ref rte_node_udp4_input_api.h),
- [mbuf_dynfield](@ref rte_node_mbuf_dynfield.h)
+ [mbuf_dynfield](@ref rte_node_mbuf_dynfield.h),
+ [pkt cls api](@ref rte_node_pkt_cls_api.h)
+
+- **cmdline**:
+ [cmdline](@ref cmdline.h),
+ [parse](@ref cmdline_parse.h),
+ [parse num](@ref cmdline_parse_num.h),
+ [parse bool](@ref cmdline_parse_bool.h),
+ [parse ipaddr](@ref cmdline_parse_ipaddr.h),
+ [parse etheraddr](@ref cmdline_parse_etheraddr.h),
+ [parse string](@ref cmdline_parse_string.h),
+ [parse portlist](@ref cmdline_parse_portlist.h),
+ [rdline](@ref cmdline_rdline.h),
+ [vt100](@ref cmdline_vt100.h),
+ [socket](@ref cmdline_socket.h),
+ [cirbuf](@ref cmdline_cirbuf.h)
- **basic**:
[bitops](@ref rte_bitops.h),
@@ -234,7 +314,9 @@ The public API headers are grouped by topics:
[argument parsing](@ref rte_argparse.h),
[ptr_compress](@ref rte_ptr_compress.h),
[string](@ref rte_string_fns.h),
- [thread](@ref rte_thread.h)
+ [thread](@ref rte_thread.h),
+ [reciprocal](@ref rte_reciprocal.h),
+ [UUID](@ref rte_uuid.h)
- **debug**:
[jobstats](@ref rte_jobstats.h),
@@ -247,11 +329,17 @@ The public API headers are grouped by topics:
[log](@ref rte_log.h),
[errno](@ref rte_errno.h),
[trace](@ref rte_trace.h),
- [trace_point](@ref rte_trace_point.h)
+ [EAL trace](@ref rte_eal_trace.h),
+ [trace_point](@ref rte_trace_point.h),
+ [trace point register](@ref rte_trace_point_register.h)
- **misc**:
[EAL config](@ref rte_eal.h),
+ [class](@ref rte_class.h),
[common](@ref rte_common.h),
+ [epoll](@ref rte_epoll.h),
+ [hypervisor](@ref rte_hypervisor.h),
+ [OS](@ref rte_os.h),
[experimental APIs](@ref rte_compat.h),
[version](@ref rte_version.h)
--
2.43.0
^ permalink raw reply related
* [PATCH 3/7] doc: fix typos in rte_bus_pci.h
From: Marat Khalili @ 2026-07-02 20:00 UTC (permalink / raw)
To: Chenbo Xia, Nipun Gupta; +Cc: dev, thomas, bruce.richardson
In-Reply-To: <20260702200050.88710-1-marat.khalili@huawei.com>
This file contained a couple of doxygen typos that prevented successful
documentation build. It was not discovered previously because the driver
despite the presence of public headers was not included in the
documentation build.
Fix doxygen typos (replace `@bar` with `@p bar`).
Signed-off-by: Marat Khalili <marat.khalili@huawei.com>
---
drivers/bus/pci/rte_bus_pci.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h
index 19a7b15b99fd..22a7beb1fc4c 100644
--- a/drivers/bus/pci/rte_bus_pci.h
+++ b/drivers/bus/pci/rte_bus_pci.h
@@ -222,7 +222,7 @@ int rte_pci_write_config(const struct rte_pci_device *device,
* @param len
* The length of the data buffer.
* @param offset
- * The offset into MMIO space described by @bar.
+ * The offset into MMIO space described by @p bar.
* @return
* Number of bytes read on success, negative on error.
*/
@@ -246,7 +246,7 @@ int rte_pci_mmio_read(const struct rte_pci_device *device, int bar,
* @param len
* The length of the data buffer.
* @param offset
- * The offset into MMIO space described by @bar.
+ * The offset into MMIO space described by @p bar.
* @return
* Number of bytes written on success, negative on error.
*/
--
2.43.0
^ permalink raw reply related
* [PATCH 6/7] doc: add missing drivers to doxy-api.conf.in
From: Marat Khalili @ 2026-07-02 20:00 UTC (permalink / raw)
Cc: dev, thomas, bruce.richardson
In-Reply-To: <20260702200050.88710-1-marat.khalili@huawei.com>
Make sure all drivers declaring public headers are added to
`doxy-api.conf.in` to trigger documentation generation. Sort them.
The only driver still omitted is cnxk_bphy since it needs writing
multiple new doxygen descriptions which could not be done on the spot
(tracked by bug 1962 in bugzilla).
Signed-off-by: Marat Khalili <marat.khalili@huawei.com>
---
doc/api/doxy-api.conf.in | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/doc/api/doxy-api.conf.in b/doc/api/doxy-api.conf.in
index 2cb152d6db98..1620027215a9 100644
--- a/doc/api/doxy-api.conf.in
+++ b/doc/api/doxy-api.conf.in
@@ -5,15 +5,20 @@ PROJECT_NAME = DPDK
PROJECT_NUMBER = @VERSION@
USE_MDFILE_AS_MAINPAGE = @TOPDIR@/doc/api/doxy-api-index.md
INPUT = @TOPDIR@/doc/api/doxy-api-index.md \
+ @TOPDIR@/drivers/baseband/acc \
+ @TOPDIR@/drivers/baseband/fpga_5gnr_fec \
+ @TOPDIR@/drivers/bus/pci \
@TOPDIR@/drivers/bus/vdev \
+ @TOPDIR@/drivers/bus/vmbus \
@TOPDIR@/drivers/common/dpaax \
@TOPDIR@/drivers/crypto/cnxk \
@TOPDIR@/drivers/crypto/scheduler \
- @TOPDIR@/drivers/event/dlb2 \
@TOPDIR@/drivers/event/cnxk \
+ @TOPDIR@/drivers/event/dlb2 \
@TOPDIR@/drivers/mempool/cnxk \
@TOPDIR@/drivers/mempool/dpaa2 \
@TOPDIR@/drivers/net/ark \
+ @TOPDIR@/drivers/net/avp \
@TOPDIR@/drivers/net/bnxt \
@TOPDIR@/drivers/net/bonding \
@TOPDIR@/drivers/net/cnxk \
@@ -23,9 +28,16 @@ INPUT = @TOPDIR@/doc/api/doxy-api-index.md \
@TOPDIR@/drivers/net/intel/iavf \
@TOPDIR@/drivers/net/intel/ixgbe \
@TOPDIR@/drivers/net/mlx5 \
+ @TOPDIR@/drivers/net/ntnic \
+ @TOPDIR@/drivers/net/ring \
@TOPDIR@/drivers/net/softnic \
+ @TOPDIR@/drivers/net/txgbe \
+ @TOPDIR@/drivers/net/vhost \
+ @TOPDIR@/drivers/power/kvm_vm \
+ @TOPDIR@/drivers/raw/cnxk_gpio \
@TOPDIR@/drivers/raw/dpaa2_cmdif \
@TOPDIR@/drivers/raw/ifpga \
+ @TOPDIR@/drivers/raw/ntb \
@TOPDIR@/lib/eal/include \
@TOPDIR@/lib/eal/include/generic \
@TOPDIR@/lib/acl \
--
2.43.0
^ permalink raw reply related
* [PATCH 0/7] doc: build for all public headers
From: Marat Khalili @ 2026-07-02 20:00 UTC (permalink / raw)
Cc: dev, thomas, bruce.richardson
In-Reply-To: <f0e4ffa90e57467cb292d7888caa697e@huawei.com>
It was noticed that not all public headers were included in the doxygen
build, and once built not all files were listed in the index file
serving as a point of entry for the HTML version.
Bruce Richardson provided an idea and a draft implementation of the
configuration-time check, which I optimized to avoid repeat grep calls
and expanded to include indexing check.
After all drivers and public headers were included, multiple small
problems have surfaced fixes for which (with one exception covered by
bug 1962) are also included in this patch set.
Marat Khalili (7):
doc: detect ignored public headers
doc: document rte_os.h
doc: fix typos in rte_bus_pci.h
doc: fix typos in rte_bus_vmbus.h
doc: add missing globs to doxy-api.conf.in
doc: add missing drivers to doxy-api.conf.in
doc: add missing headers to doxy-api-index.md
doc/api/doxy-api-index.md | 116 ++++++++++++++++++++++++++----
doc/api/doxy-api.conf.in | 17 ++++-
drivers/bus/pci/rte_bus_pci.h | 4 +-
drivers/bus/vmbus/rte_bus_vmbus.h | 33 +++++----
drivers/meson.build | 17 +++++
lib/eal/include/generic/rte_os.h | 13 ++++
lib/meson.build | 23 ++++++
meson.build | 19 +++++
8 files changed, 211 insertions(+), 31 deletions(-)
create mode 100644 lib/eal/include/generic/rte_os.h
--
2.43.0
^ permalink raw reply
* [PATCH 2/7] doc: document rte_os.h
From: Marat Khalili @ 2026-07-02 20:00 UTC (permalink / raw)
Cc: dev, thomas, bruce.richardson
In-Reply-To: <20260702200050.88710-1-marat.khalili@huawei.com>
File rte_os.h did not previously have a generic version to generate
documentation from, but its OS-specific version was installed. Since it
is now verified that documentation is generated for all public headers,
add a generic stub containing description of this file.
Signed-off-by: Marat Khalili <marat.khalili@huawei.com>
---
lib/eal/include/generic/rte_os.h | 13 +++++++++++++
1 file changed, 13 insertions(+)
create mode 100644 lib/eal/include/generic/rte_os.h
diff --git a/lib/eal/include/generic/rte_os.h b/lib/eal/include/generic/rte_os.h
new file mode 100644
index 000000000000..aa96321aefc4
--- /dev/null
+++ b/lib/eal/include/generic/rte_os.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2010-2019 Intel Corporation
+ */
+
+#ifndef _RTE_OS_H_
+#define _RTE_OS_H_
+
+/**
+ * This header should contain any definition
+ * which is not supported natively or named differently in the local OS.
+ */
+
+#endif /* _RTE_OS_H_ */
--
2.43.0
^ permalink raw reply related
* [PATCH 1/7] doc: detect ignored public headers
From: Marat Khalili @ 2026-07-02 20:00 UTC (permalink / raw)
To: Bruce Richardson; +Cc: dev, thomas
In-Reply-To: <20260702200050.88710-1-marat.khalili@huawei.com>
Some public headers were omitted from doc/api/doxy-api-index.md and/or
doc/api/doxy-api.conf.in. Add checks to meson configuration detecting
and warning about these.
Suggested-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Marat Khalili <marat.khalili@huawei.com>
---
drivers/meson.build | 17 +++++++++++++++++
lib/meson.build | 23 +++++++++++++++++++++++
meson.build | 19 +++++++++++++++++++
3 files changed, 59 insertions(+)
diff --git a/drivers/meson.build b/drivers/meson.build
index 102a8262e588..09c063660291 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -287,6 +287,23 @@ foreach subpath:subdirs
dpdk_headers += headers
dpdk_drivers_headers += driver_sdk_headers
+ if check_docs and headers.length() > 0
+ foreach h:headers
+ hname = fs.name(h)
+ if not hname.startswith('rte_')
+ warning('public header @0@ name does not start with "rte_"'.format(h))
+ endif
+ if hname not in doc_indexed_headers
+ warning('public header @0@ is not listed in @1@'.format(h, doc_index_path))
+ endif
+ endforeach
+ doc_dir = 'drivers/' + drv_path
+ if doc_dir not in doc_built_dirs
+ warning('public header directory @0@ is not listed in @1@'.format(doc_dir,
+ doc_build_path))
+ endif
+ endif
+
if headers.length() > 0
dpdk_includes += include_directories(drv_path)
endif
diff --git a/lib/meson.build b/lib/meson.build
index af5c160cb800..ff5c474d2cc3 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -209,6 +209,29 @@ foreach l:libraries
dpdk_indirect_headers += indirect_headers
dpdk_drivers_headers += driver_sdk_headers
+ if check_docs and headers.length() > 0
+ foreach h:headers
+ hname = fs.name(h)
+ if not (hname.startswith('rte_') or hname.startswith('cmdline'))
+ warning('public header @0@ name does not start with "rte_" or "cmdline"'.format(h))
+ endif
+ if hname not in doc_indexed_headers
+ warning('public header @0@ is not listed in @1@'.format(h, doc_index_path))
+ endif
+ endforeach
+ if l == 'eal'
+ doc_dirs = ['lib/eal/include', 'lib/eal/include/generic']
+ else
+ doc_dirs = ['lib/' + l]
+ endif
+ foreach d:doc_dirs
+ if d not in doc_built_dirs
+ warning('public header directory @0@ is not listed in @1@'.format(doc_dir,
+ doc_build_path))
+ endif
+ endforeach
+ endif
+
libname = 'rte_' + name
includes += include_directories(l)
dpdk_includes += include_directories(l)
diff --git a/meson.build b/meson.build
index b01010ffa076..87666f1f81f4 100644
--- a/meson.build
+++ b/meson.build
@@ -88,6 +88,25 @@ if is_linux
global_inc += include_directories('kernel/linux')
endif
+# on linux, try to check that documentation sources are correctly built and indexed
+check_docs = is_linux and meson.version().version_compare('>= 0.60.0')
+
+if check_docs
+ doc_build_path = 'doc/api/doxy-api.conf.in'
+ doc_build_file = dpdk_source_root / doc_build_path
+ doc_built_dirs = run_command('sed', '--regexp-extended', '--quiet',
+ # Extract and print the file path immediately following @TOPDIR@/ .
+ 's#^(INPUT *=)? *@TOPDIR@/([^ ]*)( .*|\\\\|)$#\\2#p',
+ doc_build_file, check: true).stdout().splitlines()
+
+ doc_index_path = 'doc/api/doxy-api-index.md'
+ doc_index_file = dpdk_source_root / doc_index_path
+ doc_indexed_headers = run_command('sed', '--regexp-extended', '--quiet',
+ # Extract and print the (@ref ...) contents.
+ 's#^.*\\(@ref ([^)]*)\\).*$#\\1#p',
+ doc_index_file, check: true).stdout().splitlines()
+endif
+
# build libs and drivers
subdir('lib')
subdir('drivers')
--
2.43.0
^ permalink raw reply related
* [PATCH 5/7] doc: add missing globs to doxy-api.conf.in
From: Marat Khalili @ 2026-07-02 20:00 UTC (permalink / raw)
Cc: dev, thomas, bruce.richardson
In-Reply-To: <20260702200050.88710-1-marat.khalili@huawei.com>
Public headers starting from `cmdline` (except for `cmdline.h` itself)
and `bpf_def.h` were not previously included in the documentation build.
Add missing file patterns (globs) to include all public headers.
Signed-off-by: Marat Khalili <marat.khalili@huawei.com>
---
doc/api/doxy-api.conf.in | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/doc/api/doxy-api.conf.in b/doc/api/doxy-api.conf.in
index bedd94468150..2cb152d6db98 100644
--- a/doc/api/doxy-api.conf.in
+++ b/doc/api/doxy-api.conf.in
@@ -88,7 +88,8 @@ INPUT = @TOPDIR@/doc/api/doxy-api-index.md \
@TOPDIR@/lib/vhost
INPUT += @API_EXAMPLES@
FILE_PATTERNS = rte_*.h \
- cmdline.h
+ cmdline*.h \
+ bpf_def.h
PREDEFINED = __DOXYGEN__ \
RTE_ATOMIC \
RTE_HAS_CPUSET \
--
2.43.0
^ permalink raw reply related
* [PATCH 4/7] doc: fix typos in rte_bus_vmbus.h
From: Marat Khalili @ 2026-07-02 20:00 UTC (permalink / raw)
To: Long Li, Wei Hu; +Cc: dev, thomas, bruce.richardson
In-Reply-To: <20260702200050.88710-1-marat.khalili@huawei.com>
This file contained multiple doxygen issues that prevented successful
documentation build (missing, extra, misspelt parameter names etc). It
was not discovered previously because the driver despite the presence of
public headers was not included in the documentation build.
Fix invalid doxygen parameters annotations.
Signed-off-by: Marat Khalili <marat.khalili@huawei.com>
---
drivers/bus/vmbus/rte_bus_vmbus.h | 33 +++++++++++++++++++------------
1 file changed, 20 insertions(+), 13 deletions(-)
diff --git a/drivers/bus/vmbus/rte_bus_vmbus.h b/drivers/bus/vmbus/rte_bus_vmbus.h
index 2e9898ed7fb6..7f3ebd823201 100644
--- a/drivers/bus/vmbus/rte_bus_vmbus.h
+++ b/drivers/bus/vmbus/rte_bus_vmbus.h
@@ -111,7 +111,7 @@ int rte_vmbus_max_channels(const struct rte_vmbus_device *device);
*
* @param primary
* A pointer to primary VMBUS channel
- * @param chan
+ * @param new_chan
* A pointer to a secondary VMBUS channel pointer that will be filled.
* @return
* - 0 Success; channel opened.
@@ -158,6 +158,8 @@ bool rte_vmbus_chan_rx_empty(const struct vmbus_channel *channel);
/**
* Send the specified buffer on the given channel
*
+ * @param dev
+ * A pointer to a rte_vmbus_device structure describing the device
* @param channel
* Pointer to vmbus_channel structure.
* @param type
@@ -184,7 +186,9 @@ int rte_vmbus_chan_send(struct rte_vmbus_device *dev,
/**
* Explicitly signal host that data is available
*
- * @param
+ * @param dev
+ * A pointer to a rte_vmbus_device structure describing the device
+ * @param channel
* Pointer to vmbus_channel structure.
*
* Used when batching multiple sends and only signaling host
@@ -203,11 +207,10 @@ struct iova_list {
/**
* Send a scattered buffer on the given channel
*
+ * @param dev
+ * A pointer to a rte_vmbus_device structure describing the device
* @param channel
* Pointer to vmbus_channel structure.
- * @param type
- * Type of packet that is being send e.g. negotiate, time
- * packet etc.
* @param gpa
* Array of buffers to send
* @param gpacnt
@@ -218,8 +221,6 @@ struct iova_list {
* Maximum size of what the buffer will hold
* @param xact
* Identifier of the request
- * @param flags
- * Message type inband, rxbuf, gpa
* @param need_sig
* Is host signal tx is required (optional)
*
@@ -234,13 +235,15 @@ int rte_vmbus_chan_send_sglist(struct rte_vmbus_device *dev,
* Receive response to request on the given channel
* skips the channel header.
*
- * @param channel
+ * @param dev
+ * A pointer to a rte_vmbus_device structure describing the device
+ * @param chan
* Pointer to vmbus_channel structure.
* @param data
* Pointer to the buffer you want to receive the data into.
* @param len
* Pointer to size of receive buffer (in/out)
- * @param
+ * @param request_id
* Pointer to received transaction_id
* @return
* On success, returns 0
@@ -255,7 +258,7 @@ int rte_vmbus_chan_recv(struct rte_vmbus_device *dev,
* Receive response to request on the given channel
* includes the channel header.
*
- * @param channel
+ * @param chan
* Pointer to vmbus_channel structure.
* @param data
* Pointer to the buffer you want to receive the data into.
@@ -272,7 +275,9 @@ int rte_vmbus_chan_recv_raw(struct vmbus_channel *chan,
* Notify host of bytes read (after recv_raw)
* Signals host if required.
*
- * @param channel
+ * @param dev
+ * A pointer to a rte_vmbus_device structure describing the device
+ * @param chan
* Pointer to vmbus_channel structure.
* @param bytes_read
* Number of bytes read since last signal
@@ -284,7 +289,7 @@ void rte_vmbus_chan_signal_read(struct rte_vmbus_device *dev,
/**
* Determine sub channel index of the given channel
*
- * @param channel
+ * @param chan
* Pointer to vmbus_channel structure.
* @return
* Sub channel index (0 for primary)
@@ -309,7 +314,9 @@ void rte_vmbus_set_latency(const struct rte_vmbus_device *dev,
/**
* For debug dump contents of ring buffer.
*
- * @param channel
+ * @param f
+ * Output file to dump to.
+ * @param chan
* Pointer to vmbus_channel structure.
*/
void rte_vmbus_chan_dump(FILE *f, const struct vmbus_channel *chan);
--
2.43.0
^ permalink raw reply related
* [DPDK/ethdev Bug 1698] bonding Rx crash in a secondary process
From: bugzilla @ 2026-07-02 19:44 UTC (permalink / raw)
To: dev
In-Reply-To: <bug-1698-3@http.bugs.dpdk.org/>
http://bugs.dpdk.org/show_bug.cgi?id=1698
Thomas Monjalon (thomas@monjalon.net) changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|UNCONFIRMED |RESOLVED
--- Comment #6 from Thomas Monjalon (thomas@monjalon.net) ---
Resolved in https://dpdk.org/id/6d77d081d8
net/bonding: prevent crash on Rx/Tx from secondary process
--
You are receiving this mail because:
You are the assignee for the bug.
^ permalink raw reply
* Re: [PATCH 0/2] fix Rx split in testpmd
From: Thomas Monjalon @ 2026-07-02 19:42 UTC (permalink / raw)
To: Song Jiale; +Cc: dev
In-Reply-To: <20260624230656.2172633-1-thomas@monjalon.net>
25/06/2026 01:03, Thomas Monjalon:
> Adding selective Rx in DPDK 26.07-rc1
> introduced a regression when configuring Rx split
> at runtime with mempools defined on start.
>
> While fixing it, a test is added in DTS,
> and a refactoring in DTS is added as first patch
> to make the second change smaller.
>
> Thomas Monjalon (2):
> dts: simplify packet check in Rx split
> app/testpmd: fix runtime config of Rx split
I was expecting a test from the bug reporter.
Applied
^ permalink raw reply
* [DPDK/ethdev Bug 1962] Documentation build fails for driver cnxk_bphy
From: bugzilla @ 2026-07-02 19:23 UTC (permalink / raw)
To: dev
http://bugs.dpdk.org/show_bug.cgi?id=1962
Bug ID: 1962
Summary: Documentation build fails for driver cnxk_bphy
Product: DPDK
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: ethdev
Assignee: dev@dpdk.org
Reporter: marat.khalili@huawei.com
CC: tduszynski@marvell.com, thomas@monjalon.net
Target Milestone: ---
Documentation build for driver cnxk_bphy, if included in
`doc/api/doxy-api.conf.in`, fails with the following error:
```
drivers/raw/cnxk_bphy/rte_pmd_bphy.h:177: error: Member
cnxk_bphy_cgx_eth_mode_cpri (enumeration) of file rte_pmd_bphy.h is not
documented. (warning treated as error, aborting now)
```
Since `rte_pmd_bphy.h` is a public header, it should probably have a valid
documentation configured in `doc/api/doxy-api.conf.in` and indexed in
`doc/api/doxy-api.conf.in`.
--
You are receiving this mail because:
You are the assignee for the bug.
^ permalink raw reply
* Re: [v1] crypto/qat: fix IPsec MB header include for ARM
From: Thomas Monjalon @ 2026-07-02 18:34 UTC (permalink / raw)
To: Emma Finn; +Cc: Kai Ji, dev, gakhil
In-Reply-To: <20260630100105.2330637-1-emma.finn@intel.com>
30/06/2026 12:01, Emma Finn:
> Update the header file to always include the platform-specific
> IPsec MB header.
>
> Fixes: 03c475d609eb ("crypto/qat: require IPsec MB for HMAC precomputes")
>
> Reported-by: Thomas Monjalon <thomas@monjalon.net>
> Signed-off-by: Emma Finn <emma.finn@intel.com>
It solves the previous error, but there is another one:
build-arm64-generic-gcc/../../dpdk/drivers/crypto/qat/qat_sym.h:187:
undefined reference to `des_cfb_one'
It seems des_cfb_one() is not supported on Arm.
^ permalink raw reply
* RE: [PATCH 2/2] bpf: silence noisy message
From: Marat Khalili @ 2026-07-02 16:34 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: dev@dpdk.org, Konstantin Ananyev
In-Reply-To: <20260702093004.15841f2b@phoenix.local>
> https://github.com/DPDK/dpdk/blob/09e4f37ddd0f7d5cc7c696741f31f1582c73a716/lib/bpf/bpf_load_elf.c#L331
> -L333
> >
> > (In fact I tried to eliminate it, but had to but back at the insistence of AI reviewer
> > and even broke the build in the process...)
> >
> > So naturally I support downgrading this message. With the commit message corrected,
> >
> > Acked-by: Marat Khalili <marat.khalili@huawei.com>
>
> Looks like you added that message in:
> 55192fe168b9 ("bpf: introduce extensible load API")
It was moved from a different file, see above.
Maybe it applied to fewer code paths since they are now all merged.
Anyway it's not really important unless you think it's worth backporting.
Feel free to downgrade or remove this message.
^ permalink raw reply
* Re: [PATCH v6 00/19] DPAA bus/net/mempool/DMA driver fixes and improvements
From: Stephen Hemminger @ 2026-07-02 16:32 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: david.marchand, dev
In-Reply-To: <20260702053359.3243907-1-hemant.agrawal@nxp.com>
On Thu, 2 Jul 2026 11:03:40 +0530
Hemant Agrawal <hemant.agrawal@nxp.com> wrote:
> This series collects a set of correctness fixes, cleanups and feature
> additions across the NXP DPAA bus, net, mempool and DMA drivers.
>
> 1. Bus/fman infrastructure cleanups (patches 01, 02, 13)
> - bus/dpaa: refine fman naming and fix global scope
> - bus/dpaa: scan max BPID from DTS
> - bus/dpaa: improve log macro and fix bus detection
>
> 2. Statistics (patch 03)
> - net/dpaa: add BMI Tx statistics
>
> 3. Process-type guards (patch 04)
> - dpaa: add process-type guards to prevent segfaults in secondary
>
> 4. FQ shutdown hardening (patches 05-11)
> - bus/dpaa: define helpers for qman channel and wq
> - drivers: shutdown DPAA FQ by fq descriptor
> - bus/dpaa: improve FQ shutdown with channel validation
> - bus/dpaa: enhance DPAA FQ shutdown
> - drivers: add DPAA cgrid cleanup support
> - net/dpaa: clean Tx confirmation FQ on device stop
> - net/dpaa: remove redundant FQ shutdown from Rx queue setup
>
> 5. net/dpaa improvements (patches 12, 14, 15)
> - net/dpaa: optimize FM deconfig
> - net/dpaa: optimize FMC MAC type parsing
> - net/dpaa: report error on using deferred start
>
> 6. mempool/dpaa (patches 16-17)
> - drivers: optimize DPAA multi-entry buffer pool operations
> - drivers: release DPAA bpid on driver destructor
>
> 7. dma/dpaa (patch 18)
> - dma/dpaa: add SG data validation and ERR050757 fix
>
> 8. net/dpaa ONIC port support (patch 19)
> - net/dpaa: add ONIC port checks
>
> v6 changes:
> - Fix bman_release_fast() in patch 16: replace rte_memcpy() on the
> small bm_bufs[] stack array with memcpy(); the SIMD implementation
> of rte_memcpy reads in 32/64-byte chunks and triggers
> -Warray-bounds with GCC 15 / ASAN builds on the 64-byte array.
> memcpy() is correct here as this is a local stack buffer with no
> DMA or multi-process constraints.
>
> v5 changes:
> - Rebased onto current upstream main; resolved conflict in
> drivers/crypto/dpaa_sec/dpaa_sec.c where upstream removed the
> cryptodev_name[] local variable and snprintf() call in
> cryptodev_dpaa_sec_probe() -- patch 04 now uses dpaa_dev->name
> directly in rte_cryptodev_pmd_create().
> - Resolved conflict in drivers/net/dpaa/dpaa_ethdev.c where upstream
> removed rte_dpaa_device.eth_dev -- patch 04 now uses
> rte_eth_dev_allocated() to look up the Ethernet device by name.
>
> v4 changes:
> - Fix dpaa_bus_dev_compare() to return the strncmp result (previously
> always returned 0, breaking device matching).
> - Remove the dead get_tx_port_type() function that triggered a clang
> -Wunused-function CI failure.
> - Guard all dpaa_fm_deconfig() call sites against NULL port_handle to
> prevent a NULL dereference on partially initialised interfaces.
> - Move the penv variable declaration in dpaa_qdma_init() to the point of
> use (C99 inline), fixing a spurious -Wunused-variable warning during
> bisect of earlier patches in the series.
>
> Gagandeep Singh (2):
> bus/dpaa: enhance DPAA FQ shutdown
> dma/dpaa: add SG data validation and ERR050757 fix
>
> Hemant Agrawal (5):
> net/dpaa: clean Tx confirmation FQ on device stop
> net/dpaa: remove redundant FQ shutdown from Rx queue setup
> net/dpaa: optimize FM deconfig
> bus/dpaa: improve log macro and fix bus detection
> net/dpaa: report error on using deferred start
>
> Jun Yang (10):
> bus/dpaa: refine fman naming and fix global scope
> bus/dpaa: scan max BPID from DTS
> drivers: add BMI Tx statistics
> bus/dpaa: define helpers for qman channel and wq
> drivers: shutdown DPAA FQ by fq descriptor
> bus/dpaa: improve FQ shutdown with channel validation
> drivers: add DPAA cgrid cleanup support
> net/dpaa: optimize FMC MAC type parsing
> drivers: optimize DPAA multi-entry buffer pool operations
> drivers: release DPAA bpid on driver destructor
>
> Prashant Gupta (1):
> drivers: add process-type guards for secondary process
>
> Vanshika Shukla (1):
> net/dpaa: add ONIC port checks
>
> drivers/bus/dpaa/base/fman/fman.c | 23 ++--
> drivers/bus/dpaa/base/fman/fman_hw.c | 108 +++++++++----------
> drivers/bus/dpaa/base/qbman/bman.c | 59 ++++------
> drivers/bus/dpaa/base/qbman/bman_driver.c | 48 ++++++---
> drivers/bus/dpaa/base/qbman/qman.c | 115 +++++++++++---------
> drivers/bus/dpaa/base/qbman/qman.h | 23 +++-
> drivers/bus/dpaa/base/qbman/qman_driver.c | 29 ++++-
> drivers/bus/dpaa/dpaa_bus.c | 33 ++++--
> drivers/bus/dpaa/dpaa_bus_base_symbols.c | 4 +
> drivers/bus/dpaa/include/fman.h | 30 +++++-
> drivers/bus/dpaa/include/fsl_bman.h | 49 +++++++--
> drivers/bus/dpaa/include/fsl_qman.h | 22 +++-
> drivers/crypto/dpaa_sec/dpaa_sec.c | 3 -
> drivers/dma/dpaa/dpaa_qdma.c | 102 +++++++++++++-----
> drivers/mempool/dpaa/dpaa_mempool.c | 75 +++++++++++--
> drivers/mempool/dpaa/dpaa_mempool.h | 3 +-
> drivers/net/dpaa/dpaa_ethdev.c | 122 ++++++++++++++++++----
> drivers/net/dpaa/dpaa_ethdev.h | 22 +++-
> drivers/net/dpaa/dpaa_flow.c | 120 +++++++++++----------
> drivers/net/dpaa/dpaa_flow.h | 7 +-
> drivers/net/dpaa/dpaa_fmc.c | 73 ++++++++-----
> 21 files changed, 725 insertions(+), 345 deletions(-)
>
Still see lots of things that need fixing in detailed AI review:
Reviewed the v6 DPAA series (19 patches) against current main: applied
cleanly with git am and traced the affected paths in
drivers/{bus,net,mempool,dma}/dpaa. Three of the errors from the v3
review are still open, and the v3 fix for patch 04 introduced a new
bisect break. Details below, by patch. No Reviewed-by this round.
Resolved since v3: the deconfig NULL deref (old 12/19 interaction).
dpaa_fm_deconfig() now NULLs dpaa_intf->port_handle at the end, and all
three close-path callers plus the two dpaa_flow.c sites guard on
port_handle first. The double-deconfig/NULL-deref can no longer happen.
Patch 03: drivers: add BMI Tx statistics
Error: the Tx BMI counters are still not read from Tx registers, and
the xstats loop miscounts. fman_if_bmi_stats_get_all() and _reset()
only touch rx_bmi_map; the new tx_bmi_regs fields and
FMAN_IF_BMI_TX_STAT_OFFSET_* macros are never read by anything.
In dpaa_dev_xstats_get() the string table is now 13 standard + 8 Rx
BMI + 4 Tx BMI = 25, but bmi_count is still
sizeof(dpaa_if_rx_bmi_stats)/4 == 8, so the split point
(num - (bmi_count - 1) == 18) treats the first 5 Rx-BMI strings as
standard stats (read with the wrong offsets into the dpaa_if_stats
array), and the second loop fills the 4 Tx entries from Rx register
values. The counters reported for the tx_* names are Rx data.
Either wire get_all/reset to also read the tx_bmi_map range
(FMAN_IF_BMI_TX_STAT_OFFSET_START..END) and fix the standard/Rx/Tx
split, or drop the Tx entries from this patch.
Patch 04: drivers: add process-type guards for secondary process
Error: this now fails to build standalone, breaking bisect. The v3
fix moved the getenv() block up into dpaa_qdma_init(), but the tunable
declarations were left in patch 18. After this patch,
s_data_validation, s_sg_enable and s_pci_read are used but never
declared (they are added as static int in patch 18/f4f9e13), so the
commit does not compile. The getenv/SG-validation tunables belong in
patch 18, not here; move the whole block (and s_hw_err_check = 1) into
18 and leave this patch with only the RTE_PROC_PRIMARY guards. That
fixes the build and keeps the commit matching its subject.
Info: the dpaa_sec hunk removes the RTE_PROC_PRIMARY early-return in
cryptodev_dpaa_sec_probe(). That is correct (dpaa_sec_dev_init() has
its own primary-only guard), but the commit message should say so.
Patch 13: bus/dpaa: improve log macro and fix bus detection
Error: dpaa_bus_dev_compare() still carries probe side effects and
breaks devargs matching. It is the bus dev_compare callback; the EAL
(rte_bus_find_devargs) calls it per devargs entry and treats a 0
return as a match, returning the first entry that matches. This
version returns 0 (match) when the sysfs path is absent, and returns
0 for every call once dpaa_bus.detected is set - so after the first
device is detected, every name compares equal and the wrong devargs
is bound. It also creates the pthread key and, on failure, calls
dpaa_clean_device_list() and returns the errno as if it were a
comparison result, all from inside a comparator.
On top of that, the detection block (sysfs check + detected guard +
pthread_key_create) is now duplicated: it is still present in
rte_dpaa_bus_scan() (unchanged) and copied into dev_compare, so this
is not the "move" the commit message describes. Keep dev_compare a
pure comparator (parse + strncmp, no side effects) and leave detection
where it already is in scan(). The DPAA_DEV_PATH1/2 #defines should
also not live inside the function body.
The DPAA_BUS_LOG -> DPAA_BUS_{INFO,ERR,WARN,DEBUG} conversion is fine.
Patch 18: dma/dpaa: add SG data validation and ERR050757 fix
Warning: the five getenv() tunables (DPAA_QDMA_DATA_VALIDATION,
DPAA_QDMA_HW_ERR_CHECK, DPAA_QDMA_SG_ENABLE, DPAA_QDMA_SG_MAX_ENTRY_SIZE,
DPAA_QDMA_PCI_READ) should be devargs; the driver already uses devargs
(DPAA_DMA_ERROR_CHECK). checkpatch will also flag the getenv additions.
(This is the block that must move back here from patch 04.)
Info: s_hw_err_check changes from bool to int; it is a pure flag, keep
bool.
Patch 08: bus/dpaa: enhance DPAA FQ shutdown
Info: qman_find_fq_by_cgrid() still ends with a "do {...} while (1);"
whose only exits are returns, followed by an unreachable
"return -ENODEV;". Drop the dead return.
Patch 17: drivers: release DPAA bpid on driver destructor
Info: "#define RTE_PRIORITY_104 104" is still unused;
RTE_FINI_PRIO(dpaa_mpool_finish, 104) uses the literal. Use the macro
or drop it.
Patch 19: net/dpaa: add ONIC port checks
Info: the subject undersells the change. Besides the fman_onic
guards, this reworks the VSP path from the flat vsp_bpid[] array to a
vsp[].vsp_bp[]/bp_num structure and changes the dpaa_port_vsp_cleanup()
and dpaa_port_vsp_update() signatures. Consider splitting the VSP
refactor out, or at least describe it in the commit message.
No Reviewed-by: patches 03, 04 and 13 are functional/build errors that
need a respin. 04 and 18 should be fixed together (move the tunables);
08, 17 and 19 can ride along.
^ permalink raw reply
* Re: [PATCH 2/2] bpf: silence noisy message
From: Stephen Hemminger @ 2026-07-02 16:30 UTC (permalink / raw)
To: Marat Khalili; +Cc: dev@dpdk.org, Konstantin Ananyev
In-Reply-To: <75fa182ed2b64f88bdb0c6c8a729aaea@huawei.com>
On Thu, 2 Jul 2026 08:36:14 +0000
Marat Khalili <marat.khalili@huawei.com> wrote:
> The commit message and Fixes tag are not 100% accurate, this message existed before:
> https://github.com/DPDK/dpdk/blob/09e4f37ddd0f7d5cc7c696741f31f1582c73a716/lib/bpf/bpf_load_elf.c#L331-L333
>
> (In fact I tried to eliminate it, but had to but back at the insistence of AI reviewer
> and even broke the build in the process...)
>
> So naturally I support downgrading this message. With the commit message corrected,
>
> Acked-by: Marat Khalili <marat.khalili@huawei.com>
Looks like you added that message in:
55192fe168b9 ("bpf: introduce extensible load API")
^ permalink raw reply
* [PATCH 4/4] app/testpmd: report reason when queue setup command fails
From: Stephen Hemminger @ 2026-07-02 16:10 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Aman Singh
In-Reply-To: <20260702161244.363233-1-stephen@networkplumber.org>
The interactive "port <id> rxq|txq <id> setup" command printed a
bare failure message. rte_eth_rx/tx_queue_setup() can fail with
-EBUSY without logging anything, for example when the port is
started and the PMD does not support runtime queue setup, leaving
the user with no clue:
testpmd> port 0 rxq 0 setup
Failed to setup RX queue
Print the error string:
Failed to setup RX queue: Device or resource busy
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-pmd/cmdline.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index bb62778a26..e0dcdc1193 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -3092,7 +3092,8 @@ cmd_setup_rxtx_queue_parsed(
&port->rxq[res->qid].conf,
mp);
if (ret)
- fprintf(stderr, "Failed to setup RX queue\n");
+ fprintf(stderr, "Failed to setup RX queue: %s\n",
+ rte_strerror(-ret));
} else {
socket_id = txring_numa[res->portid];
if (!numa_support || socket_id == NUMA_NO_CONFIG)
@@ -3109,7 +3110,8 @@ cmd_setup_rxtx_queue_parsed(
socket_id,
&port->txq[res->qid].conf);
if (ret)
- fprintf(stderr, "Failed to setup TX queue\n");
+ fprintf(stderr, "Failed to setup TX queue: %s\n",
+ rte_strerror(-ret));
}
}
--
2.53.0
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox