* Re: DPAA driver series - mix up
From: Thomas Monjalon @ 2026-07-13 9:59 UTC (permalink / raw)
To: Hemant Agrawal; +Cc: Stephen Hemminger, Gagandeep Singh, dev
In-Reply-To: <PA1PR04MB10770E11CEC25E074365C3E1289FA2@PA1PR04MB10770.eurprd04.prod.outlook.com>
13/07/2026 11:27, Hemant Agrawal:
> Hi Thomas
> We sent two different series for DPAA/NXP code:
>
>
> 1. net/dpaa: bug fixes for bus, net and fmlib drivers https://patches.dpdk.org/project/dpdk/patch/20260619103901.2274740-2-hemant.agrawal@nxp.com/0
> * This was originally accepted and added to next-net by Stephen
>
>
>
> 1. DPAA bus/net/mempool/DMA driver fixes and improvements https://patches.dpdk.org/project/dpdk/patch/20260703124950.1895871-2-hemant.agrawal@nxp.com/
> * You have recently commented on it, we need to make changes
>
> I am not sure how, but I now see that the first series for fixes has been dropped. The series is marked as superseded.
He had sent an email on June 25 explaining you need to rebase:
https://mails.dpdk.org/archives/dev/2026-June/340944.html
> I have just sent v4 for the bug fix series.
> https://patches.dpdk.org/project/dpdk/patch/20260713092616.2902828-2-hemant.agrawal@nxp.com/
>
> Will you please consider it for merge it again to 26.07 ?
I don't want to take risks with new features and improvements in rc4.
If I understand well, you are talking about the fixes you rebased?
It's a pity you missed the request 3 weeks ago.
^ permalink raw reply
* DPAA driver series - mix up
From: Hemant Agrawal @ 2026-07-13 9:27 UTC (permalink / raw)
To: Thomas Monjalon, Stephen Hemminger; +Cc: Gagandeep Singh, dev
[-- Attachment #1: Type: text/plain, Size: 887 bytes --]
Hi Thomas
We sent two different series for DPAA/NXP code:
1. net/dpaa: bug fixes for bus, net and fmlib drivers https://patches.dpdk.org/project/dpdk/patch/20260619103901.2274740-2-hemant.agrawal@nxp.com/0
* This was originally accepted and added to next-net by Stephen
1. DPAA bus/net/mempool/DMA driver fixes and improvements https://patches.dpdk.org/project/dpdk/patch/20260703124950.1895871-2-hemant.agrawal@nxp.com/
* You have recently commented on it, we need to make changes
I am not sure how, but I now see that the first series for fixes has been dropped. The series is marked as superseded.
I have just sent v4 for the bug fix series.
https://patches.dpdk.org/project/dpdk/patch/20260713092616.2902828-2-hemant.agrawal@nxp.com/
Will you please consider it for merge it again to 26.07 ?
Regards
Hemant
[-- Attachment #2: Type: text/html, Size: 7083 bytes --]
^ permalink raw reply
* Re: [PATCH] net/ice: fix missing return on unsupported range in FDIR
From: Bruce Richardson @ 2026-07-13 9:27 UTC (permalink / raw)
To: sandeep.penigalapati; +Cc: dev, stable
In-Reply-To: <20260712032647.196461-1-sandeep.penigalapati@intel.com>
On Sat, Jul 11, 2026 at 11:26:47PM -0400, sandeep.penigalapati@intel.com wrote:
> From: Sandeep Penigalapati <sandeep.penigalapati@intel.com>
>
> In ice_fdir_parse_pattern(), a flow item that specifies a 'last'
> member (a range) is only allowed for IPV4 and IPV6_FRAG_EXT item
> types. For other item types the code set an rte_flow error but did
> not return, so parsing continued from an inconsistent state.
>
> Add the missing return so an unsupported range aborts parsing.
>
> Fixes: b7e8781de768 ("net/ice: support flow director for IP fragment packet")
> Cc: stable@dpdk.org
>
> Signed-off-by: Sandeep Penigalapati <sandeep.penigalapati@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Trivial fix, ok for RC4.
Applied to dpdk-next-net-intel.
Thanks,
/Bruce
> ---
> drivers/net/intel/ice/ice_fdir_filter.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/net/intel/ice/ice_fdir_filter.c b/drivers/net/intel/ice/ice_fdir_filter.c
> index fc848a33db..d7ddd32f90 100644
> --- a/drivers/net/intel/ice/ice_fdir_filter.c
> +++ b/drivers/net/intel/ice/ice_fdir_filter.c
> @@ -1929,6 +1929,7 @@ ice_fdir_parse_pattern(__rte_unused struct ice_adapter *ad,
> rte_flow_error_set(error, EINVAL,
> RTE_FLOW_ERROR_TYPE_ITEM, item,
> "Not support range");
> + return -rte_errno;
> }
>
> input_set = (tunnel_type && !is_outer) ?
> --
> 2.27.0
>
^ permalink raw reply
* [PATCH v4 18/18] net/dpaa: fix device remove
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable, Gagandeep Singh
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
From: Gagandeep Singh <g.singh@nxp.com>
Add a check to avoid closing a device that is already closed,
preventing a double-close condition during device removal.
Note: this also removes the explicit dpaa_finish() call that was
made at last-device remove time (!dpaa_valid_dev). dpaa_finish() is
registered as RTE_FINI_PRIO(dpaa_finish, 103) and will still run at
process exit, so for the normal run-then-exit path behaviour is
unchanged. For a remove-all-then-re-probe scenario, is_global_init
will remain set until exit; re-probe in a running process is not a
supported use case for this driver.
Fixes: 78ea4b4fcb52 ("bus/dpaa: improve cleanup")
Cc: stable@dpdk.org
Signed-off-by: Gagandeep Singh <g.singh@nxp.com>
---
drivers/net/dpaa/dpaa_ethdev.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index f6d9dd6248..4dc4d1f10c 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -2672,18 +2672,20 @@ static int
rte_dpaa_remove(struct rte_dpaa_device *dpaa_dev)
{
struct rte_eth_dev *eth_dev;
- int ret;
+ int ret = 0;
PMD_INIT_FUNC_TRACE();
eth_dev = rte_eth_dev_allocated(dpaa_dev->device.name);
- dpaa_eth_dev_close(eth_dev);
- ret = rte_eth_dev_release_port(eth_dev);
+ ret = dpaa_eth_dev_close(eth_dev);
+ if (eth_dev->state != RTE_ETH_DEV_UNUSED) {
+ dpaa_eth_dev_close(eth_dev);
+ ret = rte_eth_dev_release_port(eth_dev);
+ }
dpaa_valid_dev--;
- if (!dpaa_valid_dev) {
+ if (!dpaa_valid_dev)
rte_mempool_free(dpaa_tx_sg_pool);
- dpaa_finish();
- }
+
return ret;
}
--
2.25.1
^ permalink raw reply related
* [PATCH v4 17/18] net/dpaa: fix mbuf leak in SG fd creation
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
In dpaa_eth_mbuf_to_sg_fd(), when the allocated temp mbuf does not
have sufficient space for the SG entries, the function returned -1
without freeing 'temp', causing a memory leak. Free 'temp' before
returning the error.
Fixes: 8cffdcbe85aa ("net/dpaa: support scattered Rx")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa/dpaa_rxtx.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/dpaa/dpaa_rxtx.c b/drivers/net/dpaa/dpaa_rxtx.c
index 3734496d6f..272960b6e3 100644
--- a/drivers/net/dpaa/dpaa_rxtx.c
+++ b/drivers/net/dpaa/dpaa_rxtx.c
@@ -992,6 +992,7 @@ dpaa_eth_mbuf_to_sg_fd(struct rte_mbuf *mbuf,
if (temp->buf_len < ((mbuf->nb_segs * sizeof(struct qm_sg_entry))
+ temp->data_off)) {
DPAA_PMD_ERR("Insufficient space in mbuf for SG entries");
+ rte_pktmbuf_free(temp);
return -1;
}
--
2.25.1
^ permalink raw reply related
* [PATCH v4 16/18] net/dpaa: fix null l3_len check in checksum offload
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
In dpaa_checksum(), if mbuf->l3_len is zero the L4 header pointer
calculation (l3_hdr + mbuf->l3_len) points to the start of the L3
header rather than the L4 header, leading to incorrect checksum
computation. Add an early return guard when l3_len is zero.
A debug warning is logged to aid diagnosis of mbufs with
uninitialized or corrupt l3_len, since silently skipping checksum
offload would cause the packet to be transmitted without the
requested checksum.
Fixes: 5a8cf1bef775 ("net/dpaa: support checksum offload")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa/dpaa_rxtx.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/dpaa/dpaa_rxtx.c b/drivers/net/dpaa/dpaa_rxtx.c
index c5e393159a..3734496d6f 100644
--- a/drivers/net/dpaa/dpaa_rxtx.c
+++ b/drivers/net/dpaa/dpaa_rxtx.c
@@ -377,6 +377,10 @@ static inline void dpaa_checksum(struct rte_mbuf *mbuf)
struct rte_ipv6_hdr *ipv6_hdr = (struct rte_ipv6_hdr *)l3_hdr;
DPAA_DP_LOG(DEBUG, "Calculating checksum for mbuf: %p", mbuf);
+ if (mbuf->l3_len == 0) {
+ DPAA_DP_LOG(WARNING, "l3_len is 0, skipping checksum for mbuf: %p", mbuf);
+ return;
+ }
if (((mbuf->packet_type & RTE_PTYPE_L3_MASK) == RTE_PTYPE_L3_IPV4) ||
((mbuf->packet_type & RTE_PTYPE_L3_MASK) ==
--
2.25.1
^ permalink raw reply related
* [PATCH v4 15/18] net/dpaa: fix wrong buffer in xstats get by id
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
In dpaa_xstats_get_by_id(), fman_if_bmi_stats_get_all() was called
with 'values' (the output array) instead of 'values_copy' (the
scratch buffer). This caused the BMI stats to overwrite already
computed xstat values and then the subsequent loop would copy
garbage from values_copy into the output.
Pass 'values_copy' as intended so that BMI stats are fetched into
the scratch buffer and then correctly indexed into 'values'.
Fixes: d2536b006d78 ("bus/dpaa: add port buffer manager stats")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa/dpaa_ethdev.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index 1774d000a0..f6d9dd6248 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -928,7 +928,8 @@ dpaa_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
values[i] =
values_copy[dpaa_xstats_strings[i].offset / 8];
- fman_if_bmi_stats_get_all(dev->process_private, values);
+ /* i continues from previous loop; BMI stats fill values[i..stat_cnt-1] */
+ fman_if_bmi_stats_get_all(dev->process_private, values_copy);
for (j = 0; i < stat_cnt; i++, j++)
values[i] = values_copy[j];
--
2.25.1
^ permalink raw reply related
* [PATCH v4 14/18] net/dpaa: remove duplicate ptype entries
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
RTE_PTYPE_L4_TCP and RTE_PTYPE_L4_UDP were listed twice in the
supported ptypes array returned by dpaa_supported_ptypes_get().
Remove the duplicate entries.
Fixes: ec503d8fa782 ("net/dpaa: update supported ptypes")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa/dpaa_ethdev.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index 50d30d23b2..1774d000a0 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -406,8 +406,6 @@ dpaa_supported_ptypes_get(struct rte_eth_dev *dev, size_t *no_of_elements)
RTE_PTYPE_L4_TCP,
RTE_PTYPE_L4_UDP,
RTE_PTYPE_L4_FRAG,
- RTE_PTYPE_L4_TCP,
- RTE_PTYPE_L4_UDP,
RTE_PTYPE_L4_SCTP,
RTE_PTYPE_TUNNEL_ESP,
RTE_PTYPE_TUNNEL_GRE,
--
2.25.1
^ permalink raw reply related
* [PATCH v4 13/18] net/dpaa: fix xstat string typos in BMI stats table
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
Fix three issues in the xstats name table:
- 'rx_frame_discrad_count' is a misspelling, correct to
'rx_frame_discard_count'
- 'rx_out_of_buffer_discard ' has a trailing space, remove it
- 'rx_buf_diallocate' is a misspelling, correct to
'rx_buf_deallocate'
Fixes: d2536b006d78 ("bus/dpaa: add port buffer manager stats")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa/dpaa_ethdev.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index da83b45831..50d30d23b2 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -135,13 +135,13 @@ static const struct rte_dpaa_xstats_name_off dpaa_xstats_strings[] = {
offsetof(struct dpaa_if_rx_bmi_stats, fmbm_rlfc)},
{"rx_filter_frames_count",
offsetof(struct dpaa_if_rx_bmi_stats, fmbm_rffc)},
- {"rx_frame_discrad_count",
+ {"rx_frame_discard_count",
offsetof(struct dpaa_if_rx_bmi_stats, fmbm_rfdc)},
{"rx_frame_list_dma_err_count",
offsetof(struct dpaa_if_rx_bmi_stats, fmbm_rfldec)},
- {"rx_out_of_buffer_discard ",
+ {"rx_out_of_buffer_discard",
offsetof(struct dpaa_if_rx_bmi_stats, fmbm_rodc)},
- {"rx_buf_diallocate",
+ {"rx_buf_deallocate",
offsetof(struct dpaa_if_rx_bmi_stats, fmbm_rbdc)},
};
--
2.25.1
^ permalink raw reply related
* [PATCH v4 12/18] net/dpaa: fix xstat name for tx undersized counter
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
The xstat entry mapping to 'tund' (TX undersized) was incorrectly
labeled as 'rx_undersized'. Fix the prefix to 'tx_undersized'.
Fixes: b21ed3e2a16d ("net/dpaa: support extended statistics")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa/dpaa_ethdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index f679a6e781..da83b45831 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -125,7 +125,7 @@ static const struct rte_dpaa_xstats_name_off dpaa_xstats_strings[] = {
offsetof(struct dpaa_if_stats, terr)},
{"tx_vlan_frame",
offsetof(struct dpaa_if_stats, tvlan)},
- {"rx_undersized",
+ {"tx_undersized",
offsetof(struct dpaa_if_stats, tund)},
{"rx_frame_counter",
offsetof(struct dpaa_if_rx_bmi_stats, fmbm_rfrc)},
--
2.25.1
^ permalink raw reply related
* [PATCH v4 11/18] dma/dpaa: fix out-of-bounds access in SG descriptor enqueue
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable, Vanshika Shukla
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
From: Vanshika Shukla <vanshika.shukla@nxp.com>
In fsl_qdma_enqueue_desc_sg(), the code accesses desc_ssge[num - 1]
without validating num first. If pending_num is 0, num will be 0 and
the access underflows. Add a bounds check to return -EINVAL when num
is 0 or exceeds FSL_QDMA_SG_MAX_ENTRY.
Fixes: a77261f61245 ("dma/dpaa: support scatter-gather")
Cc: stable@dpdk.org
Signed-off-by: Vanshika Shukla <vanshika.shukla@nxp.com>
---
drivers/dma/dpaa/dpaa_qdma.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/dma/dpaa/dpaa_qdma.c b/drivers/dma/dpaa/dpaa_qdma.c
index a695f58bc5..e2cb157c43 100644
--- a/drivers/dma/dpaa/dpaa_qdma.c
+++ b/drivers/dma/dpaa/dpaa_qdma.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2021-2024 NXP
+ * Copyright 2021-2026 NXP
*/
#include <bus_dpaa_driver.h>
@@ -827,6 +827,11 @@ fsl_qdma_enqueue_desc_sg(struct fsl_qdma_queue *fsl_queue)
}
}
+ if (num == 0 || num > FSL_QDMA_SG_MAX_ENTRY) {
+ DPAA_QDMA_ERR("Invalid scatter-gather entry count: num=%u", num);
+ return -EINVAL;
+ }
+
ft->desc_ssge[num - 1].final = 1;
ft->desc_dsge[num - 1].final = 1;
csgf_src->length = total_len;
--
2.25.1
^ permalink raw reply related
* [PATCH v4 10/18] net/dpaa: fix port_handle leak in fm_prev_cleanup
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable, Vanshika Shukla
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
From: Vanshika Shukla <vanshika.shukla@nxp.com>
In fm_prev_cleanup(), the port_handle was not closed before being
overwritten on each iteration, causing a resource leak. Add a null
check and close the existing handle before opening a new one.
Fixes: e498f3b51f38 ("net/dpaa: improve port cleanup")
Cc: stable@dpdk.org
Signed-off-by: Vanshika Shukla <vanshika.shukla@nxp.com>
---
drivers/net/dpaa/dpaa_flow.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/dpaa/dpaa_flow.c b/drivers/net/dpaa/dpaa_flow.c
index 417b9b6fbb..f21950f64d 100644
--- a/drivers/net/dpaa/dpaa_flow.c
+++ b/drivers/net/dpaa/dpaa_flow.c
@@ -81,6 +81,10 @@ static void fm_prev_cleanup(void)
devid = fm_model.device_order[i];
/* FM Port Open */
fm_model.fm_port_params[devid].h_fm = fm_info.fman_handle;
+ if (dpaa_intf.port_handle) {
+ fm_port_close(dpaa_intf.port_handle);
+ dpaa_intf.port_handle = NULL;
+ }
dpaa_intf.port_handle =
fm_port_open(&fm_model.fm_port_params[devid]);
dpaa_intf.scheme_handle[0] = create_device(fm_info.pcd_handle,
--
2.25.1
^ permalink raw reply related
* [PATCH v4 09/18] net/dpaa: fix invalid check on interrupt unregister
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable, Gagandeep Singh
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
From: Gagandeep Singh <g.singh@nxp.com>
rte_intr_callback_unregister() returns the number of callbacks
removed (>= 1) on success and a negative value on failure. The
previous check 'if (ret)' logged a spurious warning on every
successful unregister. Fix it to 'if (ret < 0)'.
Fixes: 2aa10990a8dd ("bus/dpaa: enable link state interrupt")
Cc: stable@dpdk.org
Signed-off-by: Gagandeep Singh <g.singh@nxp.com>
---
drivers/net/dpaa/dpaa_ethdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index da7f65d8af..f679a6e781 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -559,7 +559,7 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev)
}
ret = rte_intr_callback_unregister(intr_handle,
dpaa_interrupt_handler, (void *)dev);
- if (ret) {
+ if (ret < 0) {
DPAA_PMD_WARN("%s: unregister interrupt failed(%d)",
dev->data->name, ret);
}
--
2.25.1
^ permalink raw reply related
* [PATCH v4 08/18] bus/dpaa: fix device probe issue
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable, Gagandeep Singh
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
From: Gagandeep Singh <g.singh@nxp.com>
Remove an unintended early return in the LS1043 SoC version check
that was preventing device probing from completing successfully on
LS1043A platforms.
The early return did two things: set max_push_rxq_num = 0 and skip
the DPAA_PUSH_QUEUES_NUMBER env-var override. With the return gone,
the env-var could inadvertently re-enable push mode on LS1043A, which
must remain disabled due to the FMAN push-mode errata handled in
dpaa_rxtx.c. Guard the env-var override so it only applies to
non-LS1043A SoCs.
Fixes: 164e9e13e50f ("bus/dpaa: enhance SoC version")
Cc: stable@dpdk.org
Signed-off-by: Gagandeep Singh <g.singh@nxp.com>
---
drivers/bus/dpaa/dpaa_bus.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c
index 54779f82f7..368c8eeb98 100644
--- a/drivers/bus/dpaa/dpaa_bus.c
+++ b/drivers/bus/dpaa/dpaa_bus.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
- * Copyright 2017-2025 NXP
+ * Copyright 2017-2026 NXP
*
*/
/* System headers */
@@ -724,18 +724,17 @@ rte_dpaa_bus_scan(void)
dpaa_bus.svr_ver);
}
- /* Disabling the default push mode for LS1043A */
+ /* Disabling the default push mode for LS1043A due to errata */
if (dpaa_bus.svr_ver == SVR_LS1043A_FAMILY) {
dpaa_bus.max_push_rxq_num = 0;
- return 0;
+ } else {
+ penv = getenv("DPAA_PUSH_QUEUES_NUMBER");
+ if (penv)
+ dpaa_bus.max_push_rxq_num = atoi(penv);
+ if (dpaa_bus.max_push_rxq_num > DPAA_MAX_PUSH_MODE_QUEUE)
+ dpaa_bus.max_push_rxq_num = DPAA_MAX_PUSH_MODE_QUEUE;
}
- penv = getenv("DPAA_PUSH_QUEUES_NUMBER");
- if (penv)
- dpaa_bus.max_push_rxq_num = atoi(penv);
- if (dpaa_bus.max_push_rxq_num > DPAA_MAX_PUSH_MODE_QUEUE)
- dpaa_bus.max_push_rxq_num = DPAA_MAX_PUSH_MODE_QUEUE;
-
/* Device list creation is only done once */
if (!process_once) {
rte_dpaa_bus_dev_build();
--
2.25.1
^ permalink raw reply related
* [PATCH v4 07/18] bus/dpaa: fix fd leak for ccsr mmap
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable, Jun Yang
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
The CCSR file descriptor was kept open after mmap() was done.
Close the fd immediately after mmap() as it is no longer needed,
preventing a file descriptor leak.
Fixes: 8e253882cd31 ("bus/dpaa: support interrupt portal based fd")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Jun Yang <jun.yang@nxp.com>
---
drivers/bus/dpaa/base/qbman/bman_driver.c | 3 ++-
drivers/bus/dpaa/base/qbman/qman_driver.c | 6 +++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/bus/dpaa/base/qbman/bman_driver.c b/drivers/bus/dpaa/base/qbman/bman_driver.c
index 23e44ac10b..71a2028383 100644
--- a/drivers/bus/dpaa/base/qbman/bman_driver.c
+++ b/drivers/bus/dpaa/base/qbman/bman_driver.c
@@ -145,7 +145,7 @@ void bman_thread_irq(void)
int bman_init_ccsr(const struct device_node *node)
{
- static int ccsr_map_fd;
+ int ccsr_map_fd;
uint64_t phys_addr;
const uint32_t *bman_addr;
uint64_t regs_size;
@@ -169,6 +169,7 @@ int bman_init_ccsr(const struct device_node *node)
bman_ccsr_map = mmap(NULL, regs_size, PROT_READ |
PROT_WRITE, MAP_SHARED, ccsr_map_fd, phys_addr);
+ close(ccsr_map_fd);
if (bman_ccsr_map == MAP_FAILED) {
pr_err("Can not map BMan CCSR base Bman: "
"0x%x Phys: 0x%" PRIx64 " size 0x%" PRIu64,
diff --git a/drivers/bus/dpaa/base/qbman/qman_driver.c b/drivers/bus/dpaa/base/qbman/qman_driver.c
index 3bab8b8337..45b094e0c6 100644
--- a/drivers/bus/dpaa/base/qbman/qman_driver.c
+++ b/drivers/bus/dpaa/base/qbman/qman_driver.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
*
* Copyright 2008-2016 Freescale Semiconductor Inc.
- * Copyright 2017-2022, 2025 NXP
+ * Copyright 2017-2022, 2025-2026 NXP
*
*/
@@ -270,7 +270,7 @@ int qman_global_init(void)
const struct device_node *dt_node;
size_t lenp;
const u32 *chanid;
- static int ccsr_map_fd;
+ int ccsr_map_fd;
const uint32_t *qman_addr;
uint64_t phys_addr;
uint64_t regs_size;
@@ -358,9 +358,9 @@ int qman_global_init(void)
pr_err("Can not open /dev/mem for qman ccsr map\n");
return ccsr_map_fd;
}
-
qman_ccsr_map = mmap(NULL, regs_size, PROT_READ | PROT_WRITE,
MAP_SHARED, ccsr_map_fd, phys_addr);
+ close(ccsr_map_fd);
if (qman_ccsr_map == MAP_FAILED) {
pr_err("Can not map qman ccsr base\n");
return -EINVAL;
--
2.25.1
^ permalink raw reply related
* [PATCH v4 06/18] bus/dpaa: fix BMI RX stats register offset
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable, Jun Yang
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
From: Jun Yang <jun.yang@nxp.com>
Fix incorrect register offset for BMI RX statistics counters
in the fman.h header. The wrong offset caused incorrect stats
values to be reported.
Fixes: 0095306cdbda ("bus/dpaa: add FMan node")
Cc: stable@dpdk.org
Signed-off-by: Jun Yang <jun.yang@nxp.com>
---
drivers/bus/dpaa/include/fman.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/bus/dpaa/include/fman.h b/drivers/bus/dpaa/include/fman.h
index c33fe81516..6e3abf1b50 100644
--- a/drivers/bus/dpaa/include/fman.h
+++ b/drivers/bus/dpaa/include/fman.h
@@ -2,7 +2,7 @@
*
* Copyright 2010-2012 Freescale Semiconductor, Inc.
* All rights reserved.
- * Copyright 2019-2024 NXP
+ * Copyright 2019-2026 NXP
*
*/
@@ -263,8 +263,8 @@ struct rx_bmi_regs {
/**< Buffer Manager pool Information-*/
uint32_t fmbm_acnt[FMAN_PORT_MAX_EXT_POOLS_NUM];
/**< Allocate Counter-*/
- uint32_t reserved0120[16];
- /**< 0x130/0x140 - 0x15F reserved -*/
+ uint32_t reserved0140[8];
+ /**< 0x140 - 0x15F reserved -*/
uint32_t fmbm_rcgm[FMAN_PORT_CG_MAP_NUM];
/**< Congestion Group Map*/
uint32_t fmbm_mpd; /**< BM Pool Depletion */
--
2.25.1
^ permalink raw reply related
* [PATCH v4 05/18] net/dpaa/fmlib: add null check in scheme delete
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable, Prashant Gupta
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
From: Prashant Gupta <prashant.gupta_3@nxp.com>
Add a null pointer check at the entry of fm_pcd_kg_scheme_delete().
Since p_dev is assigned directly from h_scheme via a cast
(t_device *)h_scheme, checking p_dev == NULL is equivalent to
checking h_scheme == NULL. This matches the defensive pattern used
in all sibling functions in fm_lib.c and returns E_NO_DEVICE on a
null handle.
Fixes: 663ff698e38f ("net/dpaa: support VSP in fmlib")
Cc: stable@dpdk.org
Signed-off-by: Prashant Gupta <prashant.gupta_3@nxp.com>
---
drivers/net/dpaa/fmlib/fm_lib.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/dpaa/fmlib/fm_lib.c b/drivers/net/dpaa/fmlib/fm_lib.c
index b35feba004..65a818372e 100644
--- a/drivers/net/dpaa/fmlib/fm_lib.c
+++ b/drivers/net/dpaa/fmlib/fm_lib.c
@@ -305,6 +305,9 @@ fm_pcd_kg_scheme_delete(t_handle h_scheme)
_fml_dbg("Calling...");
+ if (p_dev == NULL)
+ return E_NO_DEVICE;
+
p_pcd_dev = (t_device *)p_dev->h_user_priv;
id.obj = UINT_TO_PTR(p_dev->id);
--
2.25.1
^ permalink raw reply related
* [PATCH v4 03/18] bus/dpaa: fix error handling in qman_query
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
Optimize error handling in qman_query() to avoid redundant
checks and properly propagate error codes.
Fixes: 06268e2cb175 ("bus/dpaa: query queue frame count support")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/bus/dpaa/base/qbman/qman.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/bus/dpaa/base/qbman/qman.c b/drivers/bus/dpaa/base/qbman/qman.c
index 2da1b3e3f7..d289df2d33 100644
--- a/drivers/bus/dpaa/base/qbman/qman.c
+++ b/drivers/bus/dpaa/base/qbman/qman.c
@@ -1955,11 +1955,11 @@ int qman_query_fq(struct qman_fq *fq, struct qm_fqd *fqd)
cpu_relax();
DPAA_ASSERT((mcr->verb & QM_MCR_VERB_MASK) == QM_MCR_VERB_QUERYFQ);
res = mcr->result;
- if (res == QM_MCR_RESULT_OK)
- *fqd = mcr->queryfq.fqd;
- hw_fqd_to_cpu(fqd);
if (res != QM_MCR_RESULT_OK)
return -EIO;
+
+ *fqd = mcr->queryfq.fqd;
+ hw_fqd_to_cpu(fqd);
return 0;
}
--
2.25.1
^ permalink raw reply related
* [PATCH v4 04/18] net/dpaa: fix modify cgr to use index
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
In dpaa_modify_cgr(), the code was always using the pointer to
the first CGR element instead of indexing by the queue index.
Fix it to use the correct CGR entry by index.
Fixes: 62f53995caaf ("net/dpaa: add frame count based tail drop with CGR")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/net/dpaa/dpaa_ethdev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index 967e814b5d..da7f65d8af 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -1304,7 +1304,7 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
rxq->nb_desc = nb_desc;
/* Enable tail drop with cgr on this queue */
qm_cgr_cs_thres_set64(&cgr_opts.cgr.cs_thres, nb_desc, 0);
- ret = qman_modify_cgr(dpaa_intf->cgr_rx, 0, &cgr_opts);
+ ret = qman_modify_cgr(&dpaa_intf->cgr_rx[queue_idx], 0, &cgr_opts);
if (ret) {
DPAA_PMD_WARN(
"rx taildrop modify fail on fqid %d (ret=%d)",
--
2.25.1
^ permalink raw reply related
* [PATCH v4 02/18] bus/dpaa: fix fqid endianness
From: Hemant Agrawal @ 2026-07-13 9:26 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
In qman_fq_flow_control(), the fqid field in the management
command was set using the host-endian fqid instead of the
pre-converted big-endian fqid_be. Fix it to use fqid_be
consistent with all other enqueue paths.
Fixes: c47ff048b99a ("bus/dpaa: add QMAN driver core routines")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/bus/dpaa/base/qbman/qman.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/bus/dpaa/base/qbman/qman.c b/drivers/bus/dpaa/base/qbman/qman.c
index 9a99eb9785..2da1b3e3f7 100644
--- a/drivers/bus/dpaa/base/qbman/qman.c
+++ b/drivers/bus/dpaa/base/qbman/qman.c
@@ -1921,7 +1921,7 @@ int qman_fq_flow_control(struct qman_fq *fq, int xon)
goto out;
}
mcc = qm_mc_start(&p->p);
- mcc->alterfq.fqid = fq->fqid;
+ mcc->alterfq.fqid = fq->fqid_be;
mcc->alterfq.count = 0;
myverb = xon ? QM_MCC_VERB_ALTER_FQXON : QM_MCC_VERB_ALTER_FQXOFF;
--
2.25.1
^ permalink raw reply related
* [PATCH v4 01/18] bus/dpaa: fix error handling of qman_create_fq
From: Hemant Agrawal @ 2026-07-13 9:25 UTC (permalink / raw)
To: stephen, thomas, dev; +Cc: stable
In-Reply-To: <20260713092616.2902828-1-hemant.agrawal@nxp.com>
Fix the error handling path in qman_create_fq() to properly
return error codes instead of silently ignoring failures.
Fixes: c47ff048b99a ("bus/dpaa: add QMAN driver core routines")
Cc: stable@dpdk.org
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
drivers/bus/dpaa/base/qbman/qman.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/bus/dpaa/base/qbman/qman.c b/drivers/bus/dpaa/base/qbman/qman.c
index 5534e1846c..9a99eb9785 100644
--- a/drivers/bus/dpaa/base/qbman/qman.c
+++ b/drivers/bus/dpaa/base/qbman/qman.c
@@ -1579,6 +1579,9 @@ int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq)
err:
if (flags & QMAN_FQ_FLAG_DYNAMIC_FQID)
qman_release_fqid(fqid);
+#ifdef CONFIG_FSL_QMAN_FQ_LOOKUP
+ clear_fq_table_entry(fq->key);
+#endif
return -EIO;
}
--
2.25.1
^ permalink raw reply related
* [PATCH v4 00/18] net/dpaa: bug fixes for bus, net and fmlib drivers
From: Hemant Agrawal @ 2026-07-13 9:25 UTC (permalink / raw)
To: stephen, thomas, dev
In-Reply-To: <20260619103901.2274740-1-hemant.agrawal@nxp.com>
This series contains bug fixes for the DPAA PMD (bus/dpaa, net/dpaa,
net/dpaa/fmlib and dma/dpaa).
v4: rebased over master;
v3 changes (AI code review feedback):
- P05: Clarify commit message: p_dev == NULL is equivalent to h_scheme == NULL
since p_dev = (t_device *)h_scheme; consistent with all sibling functions
- P16: Add comment explaining the intentional loop continuation; clarify
commit message about the loop design
- P17: Add DPAA_DP_LOG(WARNING) before silent return on l3_len == 0 to
aid debugging of corrupt/uninitialized mbufs
v2 changes:
- P05: Fix commit message API name
- P08: Guard DPAA_PUSH_QUEUES_NUMBER env-var for LS1043A (errata)
- P09: Document dpaa_finish() removal
- P10: Fix wrong Fixes: tag
- P11: Split into two patches with correct Fixes: tags
- P13: Also fix rx_buf_diallocate -> rx_buf_deallocate
All patches are bug fixes tagged with Fixes: and Cc: stable@dpdk.org.
Gagandeep Singh (3):
bus/dpaa: fix device probe issue
net/dpaa: fix invalid check on interrupt unregister
net/dpaa: fix device remove
Hemant Agrawal (11):
bus/dpaa: fix error handling of qman_create_fq
bus/dpaa: fix fqid endianness
bus/dpaa: fix error handling in qman_query
net/dpaa: fix modify cgr to use index
bus/dpaa: fix fd leak for ccsr mmap
net/dpaa: fix xstat name for tx undersized counter
net/dpaa: fix xstat string typos in BMI stats table
net/dpaa: remove duplicate ptype entries
net/dpaa: fix wrong buffer in xstats get by id
net/dpaa: fix null l3_len check in checksum offload
net/dpaa: fix mbuf leak in SG fd creation
Jun Yang (1):
bus/dpaa: fix BMI RX stats register offset
Prashant Gupta (1):
net/dpaa/fmlib: add null check in scheme delete
Vanshika Shukla (2):
net/dpaa: fix port_handle leak in fm_prev_cleanup
dma/dpaa: fix out-of-bounds access in SG descriptor enqueue
drivers/bus/dpaa/base/qbman/bman_driver.c | 3 ++-
drivers/bus/dpaa/base/qbman/qman.c | 11 +++++---
drivers/bus/dpaa/base/qbman/qman_driver.c | 6 ++---
drivers/bus/dpaa/dpaa_bus.c | 17 ++++++-------
drivers/bus/dpaa/include/fman.h | 6 ++---
drivers/dma/dpaa/dpaa_qdma.c | 7 ++++-
drivers/net/dpaa/dpaa_ethdev.c | 31 ++++++++++++-----------
drivers/net/dpaa/dpaa_flow.c | 4 +++
drivers/net/dpaa/dpaa_rxtx.c | 5 ++++
drivers/net/dpaa/fmlib/fm_lib.c | 3 +++
10 files changed, 57 insertions(+), 36 deletions(-)
--
2.25.1
^ permalink raw reply
* Re: [PATCH v6 0/2] doc: ice: update documentation for rl_burst_size devarg
From: Dawid Wesierski @ 2026-07-13 9:44 UTC (permalink / raw)
To: dev; +Cc: bruce.richardson, thomas, stephen, marek.kasiewicz
In-Reply-To: <20260708231926.1550698-2-dawid.wesierski@intel.com>
On Wed, Jul 08, 2026, Bruce Richardson wrote:
> > The paragraph describing the ``rl_burst_size`` devarg was mangled
> > (a mid-sentence line break split "favours throughput" across two
> > lines with no space),
>
> Are you sure? It looks fine to me in output generated on my machine. Also,
> it's unlikely that changing the source text to add a line break between
> "favours" and "throughput" will cause a line break to be removed in the
> output.
Tbh im not sure. I've dropped the re-wrapping in v6. Your comment makes sense to
me.
> However, the rest of the patch rewrapping the text actually goes against
> DPDK documentation policy. In order to keep doc diffs small, we try to
> always start a sentence on a new line, and to only break lines at
> punctuation marks, or between clauses generally. This saves having massive
> diffs as the source text is re-wrapped following a change at the start of a
> paragraph.
>
> See https://doc.dpdk.org/guides/contributing/documentation.html#line-length-and-wrapping
Fixed in v6. Each sentence now starts on a new line.
> When they are rejected, is an error just logged, or does the driver fail to
> load due to an incorrect value? IF it's just a log message, is it better to
> have the driver do a hard-failure so the user can't miss the issue? That
> would be better than just noting this in the docs.
It is a hard failure. ice_cfg_rl_burst_size() validation failure in
ice_dev_init() returns -EINVAL, causing the device probe to fail.
I've updated the documentation text to explicitly state that the
driver will fail to initialize if an invalid value is provided.
Thanks for the review!
Regards,
Dawid
---------------------------------------------------------------------
Intel Technology Poland sp. z o.o.
ul. Slowackiego 173 | 80-298 Gdansk | Sad Rejonowy Gdansk Polnoc | VII Wydzial Gospodarczy Krajowego Rejestru Sadowego - KRS 101882 | NIP 957-07-52-316 | Kapital zakladowy 200.000 PLN.
Spolka oswiadcza, ze posiada status duzego przedsiebiorcy w rozumieniu ustawy z dnia 8 marca 2013 r. o przeciwdzialaniu nadmiernym opoznieniom w transakcjach handlowych.
Ta wiadomosc wraz z zalacznikami jest przeznaczona dla okreslonego adresata i moze zawierac informacje poufne. W razie przypadkowego otrzymania tej wiadomosci, prosimy o powiadomienie nadawcy oraz trwale jej usuniecie; jakiekolwiek przegladanie lub rozpowszechnianie jest zabronione.
This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). If you are not the intended recipient, please contact the sender and delete all copies; any review or distribution by others is strictly prohibited.
^ permalink raw reply
* [PATCH v6 2/2] net/iavf: disable runtime queue setup during queue rate limiting
From: Dawid Wesierski @ 2026-07-13 9:42 UTC (permalink / raw)
To: dev
Cc: thomas, stephen, bruce.richardson, marek.kasiewicz,
Dawid Wesierski, Anatoly Burakov, Vladimir Medvedkin
In-Reply-To: <20260713094259.1721234-1-dawid.wesierski@intel.com>
Runtime queue setup on E810 VFs causes queue state corruption when
queues are dynamically reconfigured while the hardware rate limiter
is actively pacing TX queues. Queue configuration messages to the PF
via virtchnl can race with ongoing TX operations, leading to undefined
behavior.
Rather than gating this behind a devarg that an application would have
to know to set (and could just as easily avoid triggering the race by
not calling rte_eth_{rx,tx}_queue_setup() on a running port), stop
advertising RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP and
RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP as soon as the application
commits a per-queue bandwidth rte_tm hierarchy, i.e. as soon as the
condition that causes the race actually exists. iavf_dev_info_get() is
re-queried by the ethdev layer on every rx/tx_queue_setup() call, so
this is enough for the generic layer to start rejecting runtime queue
(re)configuration with -EBUSY once queue rate limiting is active, and
to automatically allow it again once the rte_tm hierarchy is torn
down.
vf->qtc_map, already used elsewhere to look up a queue's TC mapping,
is repurposed as the "queue bandwidth committed" signal since it's set
by iavf_hierarchy_commit() exactly when a per-queue bandwidth mapping
has been pushed to the PF, regardless of whether the port was stopped
at the time. Fix two related issues found while making it load-bearing
for this check:
- iavf_hierarchy_commit() replaced vf->qtc_map on every successful
commit without freeing the previous allocation, leaking memory.
- vf->qtc_map was never released on VF teardown, so
iavf_uninit_vf()/iavf_init_vf() (e.g. across a VF reset) could leave
a stale pointer referencing freed unrelated memory, and the runtime
queue setup capability would never be re-advertised after a reset.
Both are fixed by freeing vf->qtc_map before replacing it in
iavf_hierarchy_commit(), and freeing and clearing it in
iavf_uninit_vf().
Signed-off-by: Marek Kasiewicz <marek.kasiewicz@intel.com>
Signed-off-by: Dawid Wesierski <dawid.wesierski@intel.com>
---
doc/guides/nics/intel_vf.rst | 10 ++++++++++
doc/guides/rel_notes/release_26_07.rst | 3 +++
drivers/net/intel/iavf/iavf_ethdev.c | 23 ++++++++++++++++++++---
drivers/net/intel/iavf/iavf_tm.c | 2 ++
4 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/doc/guides/nics/intel_vf.rst b/doc/guides/nics/intel_vf.rst
index e010f852cf..a47e3f6736 100644
--- a/doc/guides/nics/intel_vf.rst
+++ b/doc/guides/nics/intel_vf.rst
@@ -150,6 +150,16 @@ Intel\ |reg| E800 Series Ethernet devices:
for example: ``-a 18:00.0,quanta_size=2048``.
The default value is 1024, and quanta size should be set as the product of 64 in legacy host interface mode.
+* Runtime (post-start) Rx/Tx queue setup can race with the hardware Tx rate
+ limiter on E810 VFs and corrupt queue state.
+ Once an application commits a per-queue bandwidth ``rte_tm`` hierarchy,
+ the driver automatically stops advertising
+ ``RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP`` and
+ ``RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``,
+ so ``rte_eth_rx_queue_setup()``/``rte_eth_tx_queue_setup()``
+ are rejected with ``-EBUSY`` on a running port for as long as queue rate
+ limiting is active.
+
* When using the Intel out-of-tree "ice" PF/kernel driver v1.13.7 or later,
to create VFs with >16 queues (aka. "large VFs"),
it is necessary to change the rss_lut_vf_addr setting in sysfs from the default of 64 to 512.
diff --git a/doc/guides/rel_notes/release_26_07.rst b/doc/guides/rel_notes/release_26_07.rst
index 6badd6d91b..4faa7b8fe2 100644
--- a/doc/guides/rel_notes/release_26_07.rst
+++ b/doc/guides/rel_notes/release_26_07.rst
@@ -144,6 +144,9 @@ New Features
* Added support for QinQ offloading operations.
* Added support for transmitting LLDP packets based on mbuf packet type.
* Implemented AVX2 context descriptor transmit paths.
+ * Runtime Rx/Tx queue setup is now automatically disabled while a
+ per-queue bandwidth ``rte_tm`` hierarchy is committed, to avoid
+ corrupting queue state on E810 VFs.
* **Updated Intel ice driver.**
diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c
index d601ec3b6a..e475b64971 100644
--- a/drivers/net/intel/iavf/iavf_ethdev.c
+++ b/drivers/net/intel/iavf/iavf_ethdev.c
@@ -1160,9 +1160,18 @@ iavf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
dev_info->reta_size = vf->vf_res->rss_lut_size;
dev_info->flow_type_rss_offloads = IAVF_RSS_OFFLOAD_ALL;
dev_info->max_mac_addrs = IAVF_NUM_MACADDR_MAX;
- dev_info->dev_capa =
- RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP |
- RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP;
+ /*
+ * Runtime queue setup can race with the hardware Tx rate limiter on
+ * E810 VFs and corrupt queue state. Once a per-queue bandwidth rte_tm
+ * hierarchy has been committed (vf->qtc_map is set), stop advertising
+ * the capability so the ethdev layer rejects further rx/tx_queue_setup()
+ * calls on a running port with -EBUSY. The capability is re-advertised
+ * automatically once the rte_tm hierarchy is torn down.
+ */
+ if (vf->qtc_map == NULL)
+ dev_info->dev_capa =
+ RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP |
+ RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP;
dev_info->rx_offload_capa =
RTE_ETH_RX_OFFLOAD_VLAN_STRIP |
RTE_ETH_RX_OFFLOAD_QINQ_STRIP |
@@ -2760,6 +2769,14 @@ iavf_uninit_vf(struct rte_eth_dev *dev)
rte_free(vf->proto_xtr);
vf->proto_xtr = NULL;
+ /*
+ * Drop the committed queue/TC bandwidth mapping so a subsequent
+ * iavf_init_vf() (e.g. after a device reset) starts with runtime
+ * Rx/Tx queue setup available again (see iavf_dev_info_get()).
+ */
+ rte_free(vf->qtc_map);
+ vf->qtc_map = NULL;
+
rte_free(vf->rss_lut);
vf->rss_lut = NULL;
rte_free(vf->rss_key);
diff --git a/drivers/net/intel/iavf/iavf_tm.c b/drivers/net/intel/iavf/iavf_tm.c
index faa2d4b8a0..fc84bf7e6b 100644
--- a/drivers/net/intel/iavf/iavf_tm.c
+++ b/drivers/net/intel/iavf/iavf_tm.c
@@ -912,6 +912,8 @@ static int iavf_hierarchy_commit(struct rte_eth_dev *dev,
if (ret_val)
goto fail_clear;
+ /* replace the previously committed mapping, if any */
+ rte_free(vf->qtc_map);
vf->qtc_map = qtc_map;
free(old_qtc_map);
if (adapter->stopped == 1)
--
2.47.3
---------------------------------------------------------------------
Intel Technology Poland sp. z o.o.
ul. Slowackiego 173 | 80-298 Gdansk | Sad Rejonowy Gdansk Polnoc | VII Wydzial Gospodarczy Krajowego Rejestru Sadowego - KRS 101882 | NIP 957-07-52-316 | Kapital zakladowy 200.000 PLN.
Spolka oswiadcza, ze posiada status duzego przedsiebiorcy w rozumieniu ustawy z dnia 8 marca 2013 r. o przeciwdzialaniu nadmiernym opoznieniom w transakcjach handlowych.
Ta wiadomosc wraz z zalacznikami jest przeznaczona dla okreslonego adresata i moze zawierac informacje poufne. W razie przypadkowego otrzymania tej wiadomosci, prosimy o powiadomienie nadawcy oraz trwale jej usuniecie; jakiekolwiek przegladanie lub rozpowszechnianie jest zabronione.
This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). If you are not the intended recipient, please contact the sender and delete all copies; any review or distribution by others is strictly prohibited.
^ permalink raw reply related
* [PATCH v6 1/2] doc: fix ice scheduler rate-limiter burst size description
From: Dawid Wesierski @ 2026-07-13 9:42 UTC (permalink / raw)
To: dev
Cc: thomas, stephen, bruce.richardson, marek.kasiewicz,
Dawid Wesierski, Anatoly Burakov
In-Reply-To: <20260713094259.1721234-1-dawid.wesierski@intel.com>
The paragraph describing the rl_burst_size devarg did not mention
that out-of-range values are rejected, which can otherwise look like
a silent no-op to a reader. Add a note that such values cause the
driver to fail to initialize, since ice_cfg_rl_burst_size() validates
the value and dev_probe() bails out with -EINVAL if it is rejected.
Fixes: b3f2afb3b7ea ("net/ice: add scheduler rate-limiter burst size devarg")
Signed-off-by: Dawid Wesierski <dawid.wesierski@intel.com>
---
doc/guides/nics/ice.rst | 1 +
1 file changed, 1 insertion(+)
diff --git a/doc/guides/nics/ice.rst b/doc/guides/nics/ice.rst
index 5589ce934f..2f7c9e6f7c 100644
--- a/doc/guides/nics/ice.rst
+++ b/doc/guides/nics/ice.rst
@@ -164,6 +164,7 @@ Runtime Configuration
Time-sensitive applications can lower this value to reduce Tx latency jitter
at the cost of throughput by setting the ``rl_burst_size`` devargs parameter, in bytes.
A value of ``0`` (the default) keeps the hardware default.
+ Values outside the range supported by the hardware cause the driver to fail to initialize.
For example::
--
2.47.3
---------------------------------------------------------------------
Intel Technology Poland sp. z o.o.
ul. Slowackiego 173 | 80-298 Gdansk | Sad Rejonowy Gdansk Polnoc | VII Wydzial Gospodarczy Krajowego Rejestru Sadowego - KRS 101882 | NIP 957-07-52-316 | Kapital zakladowy 200.000 PLN.
Spolka oswiadcza, ze posiada status duzego przedsiebiorcy w rozumieniu ustawy z dnia 8 marca 2013 r. o przeciwdzialaniu nadmiernym opoznieniom w transakcjach handlowych.
Ta wiadomosc wraz z zalacznikami jest przeznaczona dla okreslonego adresata i moze zawierac informacje poufne. W razie przypadkowego otrzymania tej wiadomosci, prosimy o powiadomienie nadawcy oraz trwale jej usuniecie; jakiekolwiek przegladanie lub rozpowszechnianie jest zabronione.
This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). If you are not the intended recipient, please contact the sender and delete all copies; any review or distribution by others is strictly prohibited.
^ 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