[PATCH v18 00/24] NXP DPAA driver enhancements and fixes
Stephen Hemminger
stephen at networkplumber.org
Wed Sep 30 21:16:40 CEST 2026
Regenerated AI review.
Applied to main (04d091fe4c). 24/24 conflicts in the release notes
context and needs a rebase. All 24 commits build with -Dwerror=true
(gcc 13.3, x86) for bus/dpaa, common/dpaax, mempool/dpaa, net/dpaa,
crypto/dpaa_sec, dma/dpaa and event/dpaa. Not built for arm64.
The v16 errors are fixed: the mempool destructor no longer frees EAL
memory, and the O/H port can now be enabled (bus name) and reached
(devargs lookup, "oldev1" parsed). Also resolved: bman_pool_max is
clamped, a CGR is deleted when its FQ init fails, the byte-count
shortcut is gone, the FQRN wait is bounded, the fq info ioctl moved to
dev_start, OL probe rejects a secondary, the ioctl helpers return
-errno, the VSP ID is bounded before first use, the dma/dpaa param
string no longer has an #ifdef inside the macro, and the FMC parse log
levels are fixed.
Errors
------
Patch 15/24: dma/dpaa: add devargs for SG and errata workaround
None of the dma/dpaa devargs can be passed. The documented form is
-a dpaa_bus:dpaa_qdma-1,dpaa_dma_sg_disable=1
but rte_dpaa_bus_parse() only accepts fmX-macY, fmX-ohY, fmX-onicY,
dpaa_sec-N and oldevN. "dpaa_qdma-1" falls through to the fm%u-mac%u
sscanf() and is rejected, so rte_devargs_parse() fails with "failed
to parse device" and EAL init aborts. The device itself is created
as "dpaa_qdma-%d" in dpaa_create_device_list().
This is pre-existing for dpaa_dma_err_check, but this patch adds
three more devargs that cannot be used. Accept dpaa_qdma-N in
rte_dpaa_bus_parse() in a separate patch:
Fixes: a63c6426fdfd ("dma/dpaa: add option for error checks")
Cc: stable at dpdk.org
and test the new devargs end to end.
Warnings
--------
Patch 10/24: bus/dpaa: improve FQ shutdown with channel validation
The last paragraph of the commit message still describes changes
that are not in the diff. Nothing selects "the correct portal" for
push-mode Rx queues; an FQ on another portal's dedicated channel now
returns -EBUSY. Nothing cleans up CGRID or other queue parameters.
Patch 14/24: drivers: release DPAA bpid on driver destructor
The commit message still says to free rte_dpaa_bpid_info "from the
destructor instead, once, at process teardown". The code frees it
nowhere, which is correct. Update the message.
The old dpaa_mbuf_free_pool() did
rte_free(mp->pool_data);
bp_info->bp = NULL;
which writes after free, since bp_info == mp->pool_data. That fix
is buried in a feature patch. Split it out with
Fixes: 376fb49ecfca ("net/dpaa: prevent multiple mempool config")
Cc: stable at dpdk.org
Patch 22/24: drivers: add offline (O/H) port device support
"-a bus=dpaa_bus,drv_oldev=1" is an allowed devargs, so
rte_devargs_add() switches the DPAA bus to RTE_BUS_SCAN_ALLOWLIST.
Every fmX-macY port not also given with -a is then ignored, and
oldev1 itself is only probed if "-a dpaa_bus:oldev1,..." is given
too. dpaa.rst shows the two as independent examples. Document
that both are required and that ports must be listed, or use a
mechanism that does not flip the bus to allowlist mode.
Info
----
Series: patches 02 and 03 end a commit message sentence with ":"
followed by nothing ("returns -ENOMEM directly:", "in
dpaa_dev_init():"). The quoted code was lost.
Patch 08/24: The stated motivation is push-mode Rx queue shutdown,
but nothing in the series shuts down a net/dpaa Rx queue by
descriptor. The callers of qman_shutdown_fq(fq) are dpaa_sec and
oldev, and after patch 10 a push-mode FQ on another portal returns
-EBUSY anyway.
Patch 09/24: With the byte-count shortcut gone, every CGR costs a
full FQID space scan. qman_pending_fq_by_cgrid() runs to -ERANGE
even after it finds the port's own FQ, and close does this
nb_rx_queues + MAX_DPAA_CORES times per port. One pass matching
all of the port's CGRIDs would do. The "still alive?" debug message
also fires for the port's own FQs, since close never shuts them
down before this point.
Patch 14/24:
- RTE_PRIORITY_104 is a driver-local define in the RTE_ namespace.
- The new comment in dpaa_mbuf_free_pool() calls the array both
"shared (hugepage) memory" and "a fixed-size per-process table".
Patch 18/24: A drv_sh_if_name value longer than IFNAMSIZ - 1 makes
rte_strscpy() fail, and dpaa_eth_dev_configure() silently falls back
to the fmX-macY name. Reject it or at least log it.
Patch 22/24:
- rte_dpaa_bus_oldev_enabled() is exported and has no users.
- rte_pmd_dpaa_oldev.h is not in doc/api/doxy-api-index.md.
Patch 24/24:
- The FMCLESS default Rx queue count change in patch 17
(rte_lcore_count() to DPAA_MAX_NUM_PCD_QUEUES) is user visible and
not in the release notes.
- The new experimental rte_pmd_dpaa_ol_* API is not listed.
Pre-existing, not introduced here: in dpaa_dev_init() the "FMC
initializes failed" path does goto free_rx without setting ret, so
probe can succeed with no Rx queues.
More information about the dev
mailing list