On Tue, 13 Oct 2026 16:08:09 +0530
Hemant Agrawal <[email protected]> wrote:
> This series collects a set of fixes and enhancements for the NXP DPAA
> bus, mempool, dma, crypto and net drivers targeting 26.11.
>
> It includes memory-leak and resource-cleanup fixes on the device
> remove/close paths, more robust frame queue shutdown, secondary-process
> safety guards, BPID lifecycle handling, and several new features:
> enhanced virtual storage profile (VSP) port support, fmcless Rx queue
> configuration via devargs, non fmX-macY shared Ethernet naming, and DMA
> scatter-gather and errata-workaround devargs. Documentation and release
> notes are updated accordingly.
>
> v25:
> * Dropped the offline (O/H) port and DPAA cgrid cleanup patches, and
> the Rx/Tx taildrop devargs patch whose Rx threshold was overwritten
> by nb_desc at queue setup. Now 24 patches.
> * net/dpaa: keep the shared MAC base profile exempt from the one pool
> per VSP check; it is identified by bp_num, not by vsp_bp[0].
Still seeing errors and warnings in manually run AI review.
Review of [PATCH v25 00/24] NXP DPAA fixes and enhancements
Series applies cleanly to main and every commit builds with
-Dwerror=true. Fixes: hashes in 01-06 and 15 resolve correctly.
Series-level: new code comments are long and repeat the commit message
(16 has the same ten-line paragraph twice, 23 a fourteen-line block in
uninit). Cut them to what the code does not already say.
Error
=====
[PATCH v25 22/24] net/dpaa: enhance VSP port support
The VSP now keeps a pointer to the mempool's private data instead of
the BPID value:
dpaa_intf->vsp[vsp_id].vsp_bp[0] = DPAA_MEMPOOL_TO_POOL_INFO(mp);
and dpaa_eth_rx_queue_bp_check() dereferences it on the next queue
setup:
bpid != dpaa_intf->vsp[vsp_id].vsp_bp[0]->bpid
dpaa_mbuf_free_pool() does rte_free(bp_info). Stop the port, free the
mempool, set up the Rx queue again with a new pool, and this reads
freed memory. Nothing clears vsp[] on queue release or close. Store
the values, not the pointer:
struct dpaa_if_vsp {
uint32_t bpid[FMAN_PORT_MAX_EXT_POOLS_NUM];
uint32_t size[FMAN_PORT_MAX_EXT_POOLS_NUM];
uint8_t bp_num;
void *vsp_handle;
};
Warning
=======
[PATCH v25 11/24] bus/dpaa: improve FQ shutdown with channel validation
The unbounded do { } while (!found_fqrn) spin and the hang on another
portal's dedicated channel date back to c47ff048b99a and are in every
LTS. That part is a fix: split it out with
Fixes: c47ff048b99a ("bus/dpaa: add QMAN driver core routines")
Cc: [email protected]
and keep the DTS pool-channel-range parsing as a separate feature
patch.
[PATCH v25 17/24] dma/dpaa: add devargs for SG and errata workaround
Before this patch fsl_qdma_data_validation() ran unconditionally on
every completion, a byte-by-byte software compare in the datapath.
Adding the s_data_validation early return is a bug fix, not a new
option. Split it out:
Fixes: f1d30e2786b6 ("dma/dpaa: refactor driver")
Cc: [email protected]
The new !s_sg_enable loop turns a transient ring-full return from
fsl_qdma_enqueue_desc_single() into -EIO with an ERR log on the fast
path. The SG path propagates ret. Do the same:
} else {
return ret;
}
[PATCH v25 18/24] net/dpaa: support fmcless rxq number as devargs
drv_fmcless_rxq duplicates what rte_eth_dev_configure() already
decides. The default is now DPAA_MAX_NUM_PCD_QUEUES FQs, max_rx_queues
reports that, and dpaa_fm_config() distributes over
dev->data->nb_rx_queues. If the goal is to save FQIDs and CGRIDs,
allocate them at configure time when nb_rx_queues is known, rather
than adding a driver-specific knob. Drop the devarg.
[PATCH v25 19/24] net/dpaa: support non fmX-macY type of shared Ethernet name
Asking the user to supply the kernel name is another per-driver
special. The kernel netdev is bound to the same dpa-ethernet node the
driver already has (__fif->node_path); look it up from the platform
device's net/ directory in sysfs instead.
If the devarg stays: an invalid value is logged and ignored, where 18
fails the probe for a bad drv_fmcless_rxq. Parse it once in
dpaa_dev_init(), fail there, and store the name in dpaa_intf rather
than re-parsing devargs on every configure.
[PATCH v25 20/24] bus/dpaa: optimize DPAA multi-entry buffer pool operations
The comment and the commit message say entry 0 is written separately
to avoid the valid bit, but
r->bufs[0].opaque = bm_bufs[0].opaque;
is an 8-byte store that includes byte 0, the verb. Write only the
fields that are not the verb:
r->bpid = bpid;
r->bufs[0].be_desc.hi = bm_bufs[0].be_desc.hi;
r->bufs[0].be_desc.lo = bm_bufs[0].be_desc.lo;
[PATCH v25 23/24] drivers: improve DPAA crypto fq resource handling
dpaa_sec_uninit() now calls qman_shutdown_fq(), which uses
get_affine_portal() when fq->qp is NULL. Remove via rte_dev_remove()
from a thread that never ran rte_dpaa_portal_init() gets a zeroed TLS
portal and qm_mc_start() faults. Do what probe does:
if (unlikely(!DPAA_PER_LCORE_PORTAL)) {
ret = rte_dpaa_portal_init((void *)0);
if (ret)
return ret;
}
The init_error1/init_error3 paths release the whole FQID range even
when qman_shutdown_fq() failed, which is exactly what the new comment
in uninit says must not happen. Apply the same rule on the error path.
[PATCH v25 24/24] doc: update release notes with NXP DPAA changes
The commit message lists drv_oldev, drv_rx_taildrop and
drv_tx_taildrop. None of these exist in the series or the tree, and
the release notes have three bullets, not five. Update the message.
Info
====
[PATCH v25 04/24] net/dpaa: fix free port resources on close
Pre-existing, not introduced here: the dpaa_dev_init() error path
does rte_free(dpaa_intf->cgr_rx) without qman_delete_cgr() for queues
already set up by dpaa_rx_queue_init(), whose qman_create_cgr() did
list_add(&cgr->node, &p->cgr_cbs). The portal list is left pointing at
freed memory. Same for cgr_tx after dpaa_tx_queue_init().
[PATCH v25 08/24] bus/dpaa: scan max BPID from DTS
The message says "update the default BMAN HW version", the code
removes bman_ip_rev. It also makes a missing fsl,bman node and a
failed CCSR map fatal, which were only logged before. Say so.
pr_info("Max BPID: %d, fixed BPID < %d", bman_pool_max, start);
prints to stdout on every start with no newline. Use DPAA_BUS_DEBUG().
[PATCH v25 09/24] drivers: add process-type guards for secondary process
Returning -ENOTSUP from dpaa_qdma_probe() logs three errors on every
secondary start (driver, "unable to probe", "Failed to probe
device"). A positive return tells the generic bus probe to skip the
device quietly.
[PATCH v25 11/24] bus/dpaa: improve FQ shutdown with channel validation
Leftovers: QMAN_MAX_FQID is unused; qm_fqd_get_wq() from 05 has no
user after this patch; QMAN_CHANNEL_PME and QMAN_CHANNEL_PME_REV3 are
unused once qm_channel_pme is gone. dpaa_get_qm_channel_pool_num() is
only called inside bus/dpaa, so it needs neither __rte_internal nor
RTE_EXPORT_INTERNAL_SYMBOL.
[PATCH v25 13/24] net/dpaa: optimize FM deconfig
The new comment says "For FMCLESS mode of share MAC ... before fq
shutdown", but the condition is not limited to shared MAC and close
does no FQ shutdown. With dpaa_fm_deconfig() now returning 0 when
port_handle is NULL, the port_handle test in close is redundant.
[PATCH v25 14/24] net/dpaa: optimize FMC MAC type parsing
The FMC_PORT_NAME_OFFLINE branch in dpaa_port_fmc_get_idx_from_name()
is unreachable: offline/ONIC fifs never get past the mac_type checks.
Those fifs instead log "Unknown mac_type" at ERR for every FMC port
that is not theirs. Return -ENODEV for them after the number check and
drop the OFFLINE parsing.
[PATCH v25 20/24] bus/dpaa: optimize DPAA multi-entry buffer pool operations
bm_buffer_get64_from_be() as a statement-expression macro should be a
static inline function.
[PATCH v25 21/24] bus/dpaa: improve log macro usages
Beyond the macro conversion this changes return values (-1 to -ENOMEM
in dpaa_create_device_list(), of_init() error propagated) and drops
the FMan version message from NOTICE to INFO. Mention it in the
commit message.
[PATCH v25 23/24] drivers: improve DPAA crypto fq resource handling
fqids[RTE_DPAA_MAX_RX_QUEUE] is 16 KB on the probe stack. Allocate it,
or reuse it for the Tx range which only needs max_nb_queue_pairs.