On Fri, 23 Oct 2026 19:12:40 +0530
Prashant Gupta <[email protected]> wrote:

> This is the final DPAA2 upstreaming sub-series, applied on top of
> v7-S1 ("dpaa2: bus, DMA and mempool base fixes") and
> v14-S2 ("net/dpaa2 updates").
> 
> The series reworks the DPAA2 datapath, flow steering, metering,
> eventdev integration and fslmc infrastructure. It consolidates
> device configuration handling, improves queue and portal management,
> and adds support for additional DPNI, eventdev and datapath
> capabilities.
> 
> Highlights:
>   - add DMA bypass translation support and table-driven devargs parsing;
>   - optimize Tx queue, channel and dequeue processing paths;
>   - centralize MC version, SoC detection and endpoint handling;
>   - rework RSS, flow steering, QoS and default action programming;
>   - add rte_mtr support and meter rte_flow actions;
>   - improve eventdev scheduling, DPCI support and multi-port operation;
>   - support runtime IEEE1588 timestamping;
>   - rework xstats collection and MAC statistics handling;
>   - unify enqueue/dequeue datapaths across net, crypto and eventdev;
>   - add Tx fast paths and reduce confirmation overhead.
> 
> Every commit builds cleanly with arm64 and -Werror and the
> series remains bisectable.
> 
> Breeson Francis (1):
>   net/dpaa2: rework xstats with page table and MAC support
> 
> Hemant Agrawal (1):
>   net/dpaa2: reject Rx queue deferred start
> 
> Jun Yang (63):
>   net/dpaa2: refactor and optimize Rx parser result decode
>   net/dpaa2: generate devargs table and string from one list
>   crypto/dpaa2_sec: use table-driven devargs parsing
>   dma/dpaa2: use table-driven devargs parsing
>   net/dpaa2: unify debug dump via log based helpers
>   net/dpaa2: expose Rx L3/L4/L5 offsets via mbuf dynfield
>   net/dpaa2: optimize dpaa2 Tx queue and channel mapping
>   bus/fslmc: split bus-level device walk from VFIO primitives
>   bus/fslmc: centralize MC version and SoC detection in the bus layer
>   net/dpaa2: remove unused soft parser loader
>   net/dpaa2: cache per-rxq DPNI queue cfg and share CGID per TC
>   The dpaa2 PMD so far supported only two Tx buffer release schemes:
>     direct release by hardware, and an absolute Tx confirmation mode
>     (drv_tx_conf=1) where every transmitted buffer is returned on a Tx
>     confirmation queue that software must poll to free the buffers.
>     Absolute confirmation adds a confirmation descriptor and a poll cost
>     for all packets, even those the hardware could free on its own.
>   net/dpaa2: support runtime IEEE1588 timestamping
>   bus/fslmc: consume dpaa2 DQRR entries in batches
>   bus/fslmc: align dpaa2 event port depths with hardware rings
>   net/dpaa2: support multi-DPNI FS redirect and QoS table v3
>   net/dpaa2: unify xstats layout and add DPMAC counter struct
>   net/dpaa2: reimplement xstats_get() on top of xstats_get_by_id()
>   net/dpaa2: fetch only requested MAC xstats in one MC call
>   net/dpaa2: rework flow with per-table profile and group types
>   net/dpaa2: reimplement RSS distribution via rte_flow
>   net/dpaa2: expand IP address extracts for RSS hashing
>   net/dpaa2: add policer v2 MC command and L2/L3 byte units
>   net/dpaa2: support rte_mtr and METER rte_flow action
>   net/dpaa2: program flow table miss actions via rte_flow
>   net/dpaa2: support DCB Rx mode via rte_flow
>   bus/fslmc: support DPCI peer and dynamic queues
>   bus/fslmc: add alloc/free DPIO API for non-affine portals
>   event/dpaa2: rework event port model and DPCI handling
>   event/dpaa2: fix Tx adapter enqueue for mixed destinations
>   event/dpaa2: rework self test for dynamic link and balance check
>   event/dpaa2: add DPCON based standalone Rx scheduler
>   event/dpaa2: add push mode to DPCON Rx scheduler
>   event/dpaa2: drain Rx scheduler queues on destroy
>   event/dpaa2: track and detach attached Rx queues
>   net/dpaa2: add multi-port Tx API
>   event/dpaa2: limit attached Rx flows per event queue
>   eventdev: fix port link/unlink callback return documentation
>   event/dpaa2: allow event queue link to multiple ports
>   event/dpaa2: report available DPIO count and fix create cleanup
>   event/dpaa2: use event port DPIO for dequeue wait
>   bus/fslmc: consolidate DPIO interrupt setup and bound coalescing
>   event/dpaa2: honor configured dequeue timeout
>   bus/fslmc: use EAL API for DPIO interrupt
>   bus/fslmc: defer DPIO interrupt setup and bind portal to worker core
>   bus/fslmc: move Tx SG mempool to fslmc bus
>   net/dpaa2: move DPNI endpoint lookup out of the fslmc bus
>   net/dpaa2: add APIs to query device info and set default action
>   net/dpaa2: consolidate dequeue paths and optimize fast path
>   net/dpaa2: bind per-queue DPIO for rx-queue interrupts
>   net/dpaa2: add API to clean Tx confirmation queue
>   event/dpaa2: fix DQRR held buffer accounting on enqueue
>   bus/fslmc: store dequeue dpio in mbuf seq dynfield
>   bus/fslmc: use explicit flags for mbuf seqn encoding
>   net/dpaa2: unify tx burst path for ordered and atomic enqueue
>   crypto/dpaa2_sec: unify enqueue burst path for ordered enqueue
>   bus/fslmc: track atomic DCA context per dequeue dpio
>   bus/fslmc: move enqueue response descriptors to per-queue
>   event/dpaa2: add ordered schedule type support
>   bus/fslmc: make DPAA2 ORP/ODP ordering per-queue instead of per-device
>   event/dpaa2: support multi-port enqueue in selftest random event
>     generator
>   event/dpaa2: do not fail device creation on DPCI errors
>   net/dpaa2: add Tx fast path for no-confirmation case
> 
>  doc/guides/nics/dpaa2.rst                     |   29 +-
>  doc/guides/rel_notes/release_26_11.rst        |   10 +
>  drivers/bus/fslmc/bus_fslmc_driver.h          |   46 +-
>  drivers/bus/fslmc/fslmc_bus.c                 |  321 +-
>  drivers/bus/fslmc/fslmc_logs.h                |    2 +
>  drivers/bus/fslmc/fslmc_vfio.c                |  562 +-
>  drivers/bus/fslmc/fslmc_vfio.h                |   72 +-
>  drivers/bus/fslmc/mc/dpci.c                   |   37 +-
>  drivers/bus/fslmc/mc/fsl_dpci.h               |   12 +-
>  drivers/bus/fslmc/portal/dpaa2_hw_dpci.c      |  304 +-
>  drivers/bus/fslmc/portal/dpaa2_hw_dpcon.c     |   25 +-
>  drivers/bus/fslmc/portal/dpaa2_hw_dpio.c      |  668 +-
>  drivers/bus/fslmc/portal/dpaa2_hw_dpio.h      |   37 +-
>  drivers/bus/fslmc/portal/dpaa2_hw_dprc.c      |   52 +-
>  drivers/bus/fslmc/portal/dpaa2_hw_pvt.h       |  305 +-
>  drivers/bus/fslmc/private.h                   |   15 +-
>  .../fslmc/qbman/include/fsl_qbman_portal.h    |   24 +-
>  drivers/bus/fslmc/qbman/qbman_portal.c        |  100 +-
>  drivers/bus/fslmc/qbman/qbman_portal.h        |   11 +-
>  drivers/bus/fslmc/qbman/qbman_sys.h           |    4 +-
>  drivers/common/dpaax/dpaax_devarg.h           |   69 +
>  drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c   |  559 +-
>  drivers/crypto/dpaa2_sec/dpaa2_sec_priv.h     |   11 +-
>  drivers/dma/dpaa2/dpaa2_qdma.c                |   92 +-
>  drivers/dma/dpaa2/dpaa2_qdma.h                |   15 +-
>  drivers/event/dpaa2/dpaa2_eventdev.c          | 1266 ++-
>  drivers/event/dpaa2/dpaa2_eventdev.h          |   61 +-
>  drivers/event/dpaa2/dpaa2_eventdev_selftest.c |  370 +-
>  drivers/event/dpaa2/dpaa2_scheduler.c         |  673 ++
>  drivers/event/dpaa2/meson.build               |    3 +-
>  drivers/net/dpaa2/base/dpaa2_hw_dpni.c        |  544 --
>  drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h  |    6 +-
>  drivers/net/dpaa2/dpaa2_ethdev.c              | 3201 ++++---
>  drivers/net/dpaa2/dpaa2_ethdev.h              |  997 +-
>  drivers/net/dpaa2/dpaa2_flow.c                | 8426 ++++++++---------
>  drivers/net/dpaa2/dpaa2_meter.c               |  584 ++
>  drivers/net/dpaa2/dpaa2_parse_dump.h          |  707 +-
>  drivers/net/dpaa2/dpaa2_parser_decode.h       | 1148 +++
>  drivers/net/dpaa2/dpaa2_pmd_logs.h            |   34 +-
>  drivers/net/dpaa2/dpaa2_ptp.c                 |  177 +-
>  drivers/net/dpaa2/dpaa2_recycle.c             |   18 +-
>  drivers/net/dpaa2/dpaa2_rxtx.c                | 2818 +++---
>  drivers/net/dpaa2/dpaa2_sparser.c             |  137 -
>  drivers/net/dpaa2/dpaa2_sparser.h             |  202 -
>  drivers/net/dpaa2/mc/dpni.c                   |  127 +-
>  drivers/net/dpaa2/mc/fsl_dpni.h               |  378 +-
>  drivers/net/dpaa2/mc/fsl_dpni_cmd.h           |   30 +-
>  drivers/net/dpaa2/mc/fsl_net.h                |    4 +-
>  drivers/net/dpaa2/meson.build                 |    3 +-
>  drivers/net/dpaa2/rte_pmd_dpaa2.h             |  238 +-
>  lib/eventdev/eventdev_pmd.h                   |    9 +-
>  51 files changed, 14514 insertions(+), 11029 deletions(-)
>  create mode 100644 drivers/common/dpaax/dpaax_devarg.h
>  create mode 100644 drivers/event/dpaa2/dpaa2_scheduler.c
>  delete mode 100644 drivers/net/dpaa2/base/dpaa2_hw_dpni.c
>  create mode 100644 drivers/net/dpaa2/dpaa2_meter.c
>  create mode 100644 drivers/net/dpaa2/dpaa2_parser_decode.h
>  delete mode 100644 drivers/net/dpaa2/dpaa2_sparser.c
>  delete mode 100644 drivers/net/dpaa2/dpaa2_sparser.h
> 

Still has lots and lots of AI review warnings and errors.
Some maybe false positives but most likely not.

Review: [PATCH v4-S3 00/65] DPAA2 refactor (Jun Yang, Prashant Gupta)

Applied with git am --3way on dpdk-next-net for-main (52ebbf7d9de8),
all 65 apply. Per-commit builds: gcc 13.3, x86_64, -Dwerror=true,
net/event/crypto/dma/raw dpaa2 drivers, with and without
RTE_LIBRTE_IEEE1588. Findings checked against post-apply source.

Series-level
============

1. Bugs in released code are fixed silently inside refactors, or are
   carried forward by them. These need standalone fixes at the head of
   the series with Fixes: and Cc: [email protected] so they can be
   backported:

   - dpaa2_flow_item_convert() allocates num items, writes
     new_pattern[num] (heap overflow on every flow create). 21 keeps it.
     Fixes: 9ec293434e90 ("net/dpaa2: support tunnel inner protocol flow 
matching")
   - RAW item length not bounded against the key buffer. 21 keeps it.
     Fixes: 3f881f8d6eb0 ("net/dpaa2: support raw flow classification")
   - dpaa2_sec enqueue: "~(UINT64_C(1) << *dpaa2_seqn(m) & IDXMASK)",
     << binds tighter than &, shift by >= 2^31 is UB. 56 keeps it.
     Fixes: 4562de326d30 ("crypto/dpaa2_sec: support ordered queue")
   - Cross-driver seqn encoding mismatch: dpaa2_sec stores
     "DCA | idx", net/event decode "seqn - 1" (56).
   - eventdev enqueue clears DQRR_HELD/DQRR_SIZE before the enqueue
     succeeds (54).
     Fixes: b75061260c34 ("event/dpaa2: add enqueue and dequeue functionality")
   - dpaa2_eth_eventq_attach(): "LOWEST / queue_conf->ev.priority"
     divides by zero for priority 0 (highest). 34 replaces it with a
     new divide by zero for num_priorities == 1.
     Fixes: 3835cc228f32 ("event/dpaa2: set priority as per DPCON device")
   - priv->ep_dev_type/ep_name are never set in main, so
     rte_pmd_dpaa2_ep_name() returns "" and the speed capability MAC
     check is dead. 49 fixes it without saying so.
     Fixes: a0f8ddc41218 ("net/dpaa2: add API to get endpoint name")
     Fixes: c78fa95fa9b0 ("net/dpaa2: set speed capabilities based on actual 
MAC")
   - nb_tx_queues = num_tx_tcs * num_channels can exceed tx_vq[16] (07).
     Fixes: 72100f0dee21 ("net/dpaa2: support level 2 in traffic management")
   - dpaax_ptp.h compares be16 udp->dst_port to host order 319/320; UDP
     PTP never matches on LE. 13 makes dpaa2 depend on it.
     Fixes: 6cc1246b3b1a ("net/dpaa: support IEEE 1588 by timesync API")
   - qbman_swp_interrupt_set_inhibit() writes 0xffffffff (44).
     Fixes: 293c0ca94c36 ("bus/fslmc: support memory backed portals with QBMAN 
5.0")
   - eventdev create leaks DPCON/DPCI on setup_dpci failure, and
     info_get counts DPIOs already in use (42).
     Fixes: 8a5d7a8ec74b ("event/dpaa2: initialize device")
     Fixes: 342f299568ea ("event/dpaa2: return correct number of event ports")
   - tx_burst returns short on rte_vlan_insert() failure (57 keeps
     it).

2. Build failures on for-main (gcc 13, -Werror):
   - 08..65: fslmc_vfio.h adds #include <rte_vfio.h>, which no longer
     exists after the VFIO rework in main (now dev_vfio.h). Every
     patch from 08 on fails. Rebase on current for-main.
   - 21..65: -Warray-bounds in dpaa2_flow_extract_support():
       uint8_t mask[64], i;
       rte_memcpy(mask, mask_support, size);   /* uint8_t size */
     Bound size (if (size > sizeof(mask)) return -EINVAL;) and use
     memcpy.
   - 42/43: rte_atomic16_read() is gone from for-main; implicit
     declaration. Replaced in 44.
   - 12: DPAA2_TX_CONF_ENABLE removed but still used under
     RTE_LIBRTE_IEEE1588 until 13.
   With the vfio include and the mask bound patched locally, every
   other commit builds and the tip links.

   Functional bisect breaks:
   - 29/30: enqueue checks priv->evq_info[q].event_port which nothing
     sets until 31; no event can be enqueued.
   - 31: dequeue_wait still uses DPAA2_PER_LCORE_DPIO which dequeue no
     longer affines; NULL deref until 43/44.
   - 57/58: dqrr_held[] stores ~(1 << idx) then does HELD &= ~held,
     corrupting held state until 59.
   - 08: MC firmware version check removed, restored in 09.

3. Squash or reorder: 12+13, 17..20 (xstats rewritten four times, 17
   has wrong name/id mapping), 23 before 22, 34+35, 44+47+52 (DPIO intr
   API reworked three times), 49 before 17 (all DPAA2_MAC checks in
   17..20 are dead until 49), 59 into 57/58.

4. Too large to review or bisect: 01 (~1800 lines), 12 (~1400 lines
   in rxtx.c), 21 (10k lines), 31 (4 drivers), 51, 62. Split refactor
   (no behaviour change) from behaviour changes and from new features.
   Several commit logs do not describe the diff (01, 12, 18, 21, 37,
   47, 63).

5. Eventdev API problems: enqueue only accepted to queues linked to
   the calling port (29, 41; main crashes instead, still wrong);
   port_link replaces links instead of
   adding (31); ORDERED dropped (29) and re-added (61); Rx adapter
   queue_id overwritten with the ethdev rxq id (31); 10 ms delay in
   enqueue on unlinked ports (31). The selftest (33) was rewritten
   around these restrictions. Run dpdk-test-eventdev pipeline/perf
   against the series.

6. 47 and 52 write "performance" to cpufreq scaling_governor and
   rewrite /proc/irq/N/smp_affinity_list from the event and Rx fast
   paths, using rte_lcore_id() as a CPU number. Host power policy is
   not a PMD decision. Drop it.

7. getenv() for device config: new DPAA2_SCHEDULE_RX_PREFETCH (34);
   44 extends the existing DPAA2_PORTAL_INTR_* env vars to event and
   rx-intr DPIOs. Use devargs or API arguments. (Removing env vars in
   01, 21, 62 is welcome; note it in release notes.)

8. New PMD-specific API surface: rte_pmd_dpaa2_rx_get_offset,
   flow_table_query, rte_dpaa2_flow_group_set_miss_actions,
   rte_dpaa2_scheduler_*, rte_dpaa2_dev_tx_multi_ports,
   rx_queue_info_get, dev_info_get, configure_default_action,
   clean_tx_conf, and group type bits encoded into rte_flow
   attr->group. None have doxygen or release notes. Mixed rte_dpaa2_
   and rte_pmd_dpaa2_ prefixes. Justify on the list why these cannot
   be done with generic ethdev/rte_flow/eventdev API.

9. Commit 12 has no subject; the first body paragraph became the
   Subject header.

10. 21 rewrites the flow engine on top of the current for-main
   dpaa2_flow.c and drops three fixes just merged there:
   - 5384de9604 MPLS key width 4 bytes: back to 3, every extract
     after MPLS is one byte off.
   - a441f8345c minimum key size only for DPNI >= 8.7: version
     check dropped, older DPNI get 24-byte entries.
   - fa6bed304e default miss queue = last queue of the TC: back to
     the first queue; its 26.11 release note is now wrong.
   Rebase the rework onto these.


Patch findings
==============

[01/65] net/dpaa2: refactor and optimize Rx parser result decode

Error: VLAN ptype wrong, QinQ never detected
  dpaa2_dev_rx_parse_vlan() gets the summary after
  "frc_u.u16 &= ~DPAA2_PKT_TYPE_VLAN", so "sum->vlan > 1" is never
  true. RTE_PTYPE_L2_* is an enumerated field: ETHER(1) | VLAN(6) == 7
  == QINQ, so every single-tagged frame is reported as QinQ. Same for
  VLAN|ARP in parse_frc.
  Fix: pass the unmasked summary;
    *pt = (*pt & ~RTE_PTYPE_L2_MASK) |
          (sum->vlan > 1 ? RTE_PTYPE_L2_ETHER_QINQ
                         : RTE_PTYPE_L2_ETHER_VLAN);

Error: IEEE1588 Rx timestamp no longer recorded
  The RTE_LIBRTE_IEEE1588 block in dpaa2_dev_prefetch_rx_common() is
  deleted and parse_frc() never sets RX_IEEE1588_TMST.
  Fix: keep the block; set PTP|TMST from fas->ptp in parse_frc().

Error: rejected Tx SG FD freed with the Rx SG converter
  dpaa2_dev_free_eqresp_buf() calls dpaa2_eth_sg_fd_to_mbuf() on a Tx
  FD. Tx SGEs hold data addresses, not buffer starts, so
  DPAA2_INLINE_MBUF_FROM_BUF() yields a bogus mbuf that is written and
  freed; inline SGT is freed twice.
  Fix: Tx-specific free (recover the mbuf stored for the FD).

Warning: !by_channel guard on the error queue drain removed from the
  prefetch path; reintroduces the portal conflict the comment in
  main describes. Restore it.

Warning: dpaa2_dump_print() logs to RTE_LOGTYPE_USER1. Use
  dpaa2_logtype_pmd. 05 claims driver-logtype filtering as its goal.

Warning: eCPRI type 4 dump memcpy()s wire bytes into a bitfield over a
  be32 word; rma_id/ele_id are swapped. Main assembled bytes
  explicitly.


[02/65] net/dpaa2: generate devargs table and string from one list

Error: secondary process clears primary's priv->flags
  "priv->flags = 0; dpaax_get_devargs(...)" now runs before the
  secondary early return. priv is shared dev_private.
  Fix: parse/reset flags in the primary only.

Warning: devarg semantics changed (also 03, 04). Old handler accepted
  only "1"; now atoi(): "=0" clears, "=yes" clears silently, key-only
  args pass value == NULL to handlers that atoi() it (03, 06 crash).
  Fix: check pair->value != NULL once in dpaax_get_devargs(), parse
  with strtoul + end check, document the change.


[03/65] crypto/dpaa2_sec: use table-driven devargs parsing

Error: drv_strict_order can never take effect
  dpaax_get_devargs() now runs at the top of dpaa2_sec_dev_init(); the
  primary path later does "internals->en_loose_ordered = true;".
  Fix: set the default before parsing, drop the later assignment.

Error: atoi(pair->value) with value NULL on "drv_strict_order" with no
  "=" crashes probe. Same in 06 (drv_parse_protocol_offset).

Warning: dump_level and en_loose_ordered are written by secondary
  probe into shared dev_private. Primary only.


[06/65] net/dpaa2: expose Rx L3/L4/L5 offsets via mbuf dynfield

Warning: rte_pmd_dpaa2_rx_get_offset() returns stale dynfield data
  for eventdev and loopback Rx paths (never filled there). Per-packet
  DPAA2_PMD_ERR. No doxygen, no doc for drv_parse_protocol_offset.

Warning: dpaa2_dev_rx_parse_offset() runs after
  dpaa2_eth_sg_fd_to_mbuf() and reads the annotation at
  DPAA2_GET_FD_ADDR(fd); for S/G that SGT buffer was already freed
  with rte_pktmbuf_free_seg(). Parse inside the fd_to_mbuf helpers
  before the free. 13 copies the pattern in print_parser_result().


[07/65] net/dpaa2: optimize dpaa2 Tx queue and channel mapping

Error: Tx queue to TC/channel mapping changed, not in log
  "channel_id = tc_id < num_channels ? tx_channels[tc_id] :
  tx_channels[num_channels - 1]": with 2 channels and 8 TCs, TC1..7
  share ch1 and channels 2..N are unused. txq i moves from TC (i % tcs)
  to TC (i / q_per_tc). dpaa2_tm still advertises
  num_tx_tc * num_channels leaves.
  Fix: keep the per-channel mapping or document and update dpaa2_tm.

Warning: the tx_vq[]/rx_vq[] caps fix a released overflow (see
  series item 1). Split out with Fixes/stable.


[08/65] bus/fslmc: split bus-level device walk from VFIO primitives

Error: #include <rte_vfio.h> in fslmc_vfio.h; header no longer exists
  on for-main (dev_vfio.h). Build fails from here to 65.

Warning: MC firmware version check removed here, restored in 09.
  Leave it in place in 08.


[09/65] bus/fslmc: centralize MC version and SoC detection

Warning: fslmc_vfio_core_cluster_sdest() divides by
  dpaa2_cluster_size before checking it for zero. Check first.


[10/65] net/dpaa2: remove unused soft parser loader

Warning: ss_offset/ss_iova/ss_param_iova are now unused; remove.
  The /dev/mem O_RDWR probe moved to bus scan should be O_RDONLY /
  PROT_READ and log errno, not fd.


[11/65] net/dpaa2: cache per-rxq DPNI queue cfg and share CGID per TC

Error: cgid_in_use[] shrunk to MAX_TCS (8), still indexed up to
  max_cgs = attr.num_cgs (up to 255).
  Fix: priv->max_cgs = RTE_MIN(attr.num_cgs, MAX_TCS).

Error: eventq_detach no longer detaches
  Clears DPNI_QUEUE_OPT_DEST from options and then calls
  dpni_set_queue(); MC ignores the destination, FQ stays on the DPCON.
  Still so at 65. cfg is NULL after rx_queue_release or close with no
  re-setup and is dereferenced unchecked.
  Fix: if (!cfg) return -EINVAL; set DEST_NONE and pass
  DPNI_QUEUE_OPT_DEST.

Error: rx_queue_setup err_quit frees a DPCON owned by an earlier setup
  (dpcon_allocated removed). Restore the local flag.

Warning: cgid_in_use[tc]++ not undone on setup failure; CG taildrop
  never programmed for that TC again.


[12/65] (no subject)

Error: subject line missing (see series item 9). Log claims Rx
  FD-to-mbuf helpers are reused, omits IEEE1588 and TM taildrop
  removal.

Error: bisect break with RTE_LIBRTE_IEEE1588 (series item 2).

Error: indirect mbufs sent with parent's data_off/data_len
  "mi = rte_mbuf_from_indirect(mbuf); ... mbuf = mi;" then the FD is
  built from mi. A clone after adj/trim (ip_frag) sends wrong bytes.
  Fix: build FD from rte_pktmbuf_iova(m)/m->data_len of the indirect.

Error: indirect refcount handling is use-after-free
  simple_fd drops a ref on the clone without taking one on mi; sge
  helpers rte_pktmbuf_init()+free_seg() live indirects; conf path
  writes "mi->next = cur_seg->next" into a shared parent.
  Fix: never reinit a live mbuf; take a ref on mi or copy.

Error: NO_CONF single-segment path lets HW free shared buffers
  Shared direct mbufs get mempool_to_bpid(); HW releases a buffer
  others hold. Main set IVP and dropped one ref.
  Fix: if (rte_mbuf_refcnt_read(m) > 1) { DPAA2_SET_FD_IVP(fd);
       rte_mbuf_refcnt_update(m, -1); }

Error: inline SGT buffer gets a BPID in both FD and SGE[0]; released
  twice. Set DPAA2_SET_FLE_IVP for cur_seg == sg_mbuf.

Error: conf S/G with cloned head: sg_mbuf->next points at the freed
  head; double free on confirmation.

Error: per-packet helper failure returns short after the helper
  already freed/relinked the mbuf; caller frees it again. Free the
  packet, count a drop, continue.

Error: Tx-conf VDQ left outstanding when storage is freed; QBMan can
  DMA into freed memory. Drain and dpaa2_clear_queue_active_dps()
  before dpaa2_queue_storage_free().

Warning: TM software taildrop (tm_sw_td) silently removed; dpaa2_tm
  still sets it.

Warning: dpaa2_dev_free_eqresp_buf() rebuilds mbuf via
  rte_dpaa2_bpid_info[256] for conf FDs (BPID MAX_BPID); loopback FDs
  with drv_tx_conf=1 have stash config in FLC, deref'd as mbuf.

Warning: dynamic confirm writes FAEAD at buf_addr + 0x58 with no
  headroom check for foreign/extbuf mbufs.

Warning: tx_ordered "void *mq[nb_pkts]" VLA; multi_txq tx_again never
  taken; tx_conf pulled once per packet.


[13/65] net/dpaa2: support runtime IEEE1588 timestamping

Error: read_tx_timestamp tests txq->ts_to_cnfd on the Tx queue; the
  counter lives on tx_conf_queue. Never waits; returns stale value.
  53 rewrites the line and keeps the bug.
  Fix: txq->tx_conf_queue->ts_to_cnfd, bounded wait, -EAGAIN.

Error: dynfield written at offset 0 when unregistered
  rx_ts_offset is registered only with RX_OFFLOAD_TIMESTAMP; after
  timesync_enable() without it every Rx mbuf's buf_addr is
  overwritten.
  Fix: rx_ts_offset = -1 at init; write only when >= 0.

Error: tx_burst issues dpni_set_single_step_cfg() (global MC lock, up
  to 1 s spin) and races on ptp_correction_offset across lcores.
  Configure one-step from the control path only.

Error: S/G frames get a stale timestamp
  dpaa2_dev_rx_read_timestamp() reads m->buf_addr + PTA after
  dpaa2_eth_sg_fd_to_mbuf(); for S/G the annotation is in the SGT
  buffer (FD addr), already freed. Main read fd_addr + PTA. Read it
  inside the fd_to_mbuf helpers.

Warning: priv->rx_timestamp stored for every packet from every lcore,
  not only FAS_PTP frames. Eventdev Rx paths lose timestamps.

Warning: ts_to_cnfd incremented after enqueue (conf may decrement
  first). Once the wrong-counter bug is fixed, read_tx_timestamp
  drains conf from the control thread with q_storage[rte_lcore_id()]
  (LCORE_ID_ANY out of bounds).

Warning: per-packet WARN/INFO in Tx path. PTP Tx now needs an
  undocumented drv_tx_conf/drv_tx_dyn_conf.


[14/65] bus/fslmc: consume dpaa2 DQRR entries in batches

Warning: released atomic contexts stay held until ci_flush_th is
  reached; if the loop exits on nb_events they block those flows on
  all ports until this lcore polls again. Flush after the release
  loop.


[17/65] net/dpaa2: rework xstats with page table and MAC support

Error: xstats_get(NULL, 0) returns 0 instead of the count, so the
  driver xstats disappear from size queries (telemetry). 19 keeps it;
  n > count returns -EINVAL on non-DPMAC ports.
  Fix: count = dpaa2_xstats_count(dev);
       if (xstats == NULL || n < count) return count;

Warning: stats_get memsets stats (wipes ethdev rx_nombuf), puts HW
  nobuffer in rx_nombuf, counts discards in both ierrors and imissed.
  Keep main's mapping.

Warning: policer page fetched for all 8 TCs ("tc < MAX_TCS" always
  true); MC error on a missing TC fails xstats. Use num_rx_tc.

Info: rte_le_to_cpu_64() dropped on MAC counters read from MC.


[18/65] net/dpaa2: unify xstats layout and add DPMAC counter struct

Warning: log says no behaviour change; all MAC/policer xstat names
  change and DPAA2_MAC_NUM_STATS 46->62 requests new counters from MC.
  User visible: document it.

Warning: ".pg.field = (uint64_t)RTE_STR(field)" stores pointers in
  uint64_t; not a constant expression on 32-bit. Use a separate
  const char * table.


[20/65] net/dpaa2: fetch only requested MAC xstats in one MC call

Error: repeated MAC ids overrun mac_val[62] on stack and the DMA
  buffer; "uint16_t i" vs "uint32_t n" loops forever for n > 65535.
  Fix: bound mac_num, flush in chunks; uint32_t i.

Warning: MAC DMA buffers allocated on every call and every port; an
  alloc failure fails stats_get on non-MAC ports.


[21/65] net/dpaa2: rework flow with per-table profile and group types

Error: -Warray-bounds build failure (series item 2)
  dpaa2_flow_extract_support(): uint8_t mask[64] filled with
  rte_memcpy(mask, mask_support, size) with no bound on size.

Error: reverts for-main 5384de9604, a441f8345c, fa6bed304e (series
  item 10). MPLS field_size "sizeof(uint8_t) * 3" must be 4;
  dpaa2_flow_entry_size() must keep the dpaa2_dev_cmp_dpni_ver(priv,
  8, 7) check; default miss queue must stay the last queue of the TC.

Error: QoS-only flows accept DROP/PORT_ID/REPRESENTED_PORT, but QoS
  entries cannot drop or redirect; traffic is steered to the TC and
  create returns 0. Allow only QUEUE/JUMP for QoS-only flows.

Error: s_dpaa2_flow_proto_handle[64] indexed by user item type; enum
  already goes to 70 and PMD items are negative. Bounds check.

Error: actions_update[4] on stack, check_actions_support() writes one
  entry per matching action plus END with no bound.

Error: dpaa2_flow_actions_update() passes flow->qos_flow to the FS
  update; NULL for FS-only flows. Pass flow->fs_flow.

Error: dpaa2_flow_rss_action_update() tests items[i - 1].type != END
  after the loop: rejects every non-empty pattern, reads items[-1] for
  [END].

Error: RAW extract writes dpkg.extracts[raw_idx] in place and bumps
  num_extracts; overwrites the IP address extract. Use
  dpaa2_dpkg_insert_extract().

Error: group type bits not stripped
  attr->group = id | type << 8 is compared with rxq->tc_index and used
  in "group * qos_entries_per_tc + priority". QUEUE/RSS on QoS/MIX
  groups always rejected; with drv_qos_entries_per_tc, QoS/MIX flows
  (including the PMD's DCB flows from 27) fail with -ENOSPC.
  Fix: tc = RTE_DPAA2_FLOW_GROUP_ID_GET(attr->group) and use it.

Error: IPv6 item sets flow->ip_src/ip_dst = NET_PROT_IPV4; first
  destroy shrinks IPv6 extracts to 4 bytes.

Error: dpaa2_flow_create_*_flow() calls dpaa2_flow_clean() which
  frees application-held flows (UAF on later rte_flow_destroy()),
  before the new flow is even parsed. Return -EEXIST instead.

Error: [JUMP, END] also programs an FS entry with JUMP as its action;
  log says JUMP is QoS-only.

Error: failed create leaves the shared key profile modified (holes
  inserted in every flow's key) with HW not reprogrammed.

Error: PPPoE handler uses DPAA2_PARSER_MPLS_ID, fields_num 1
  (session_id never extracted).

Error: IPv4 fragment_offset: any mask sets the IP_FRAG FAF bit to 1,
  so "spec 0 / mask 0x3fff" (non-fragments) matches fragments only.

Error: remove_invalid_extract() returns 0 when only IP extracts are
  removed; table not reprogrammed, RSS destroy returns -EINVAL and
  leaks.

Error: flow_table_query derefs flow->qos_flow/fs_flow without NULL
  check; crashes on QoS-only/FS-only/RSS flows.

Error: new symbols tagged with old versions
    RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dpaa2_flow_group_set_miss_actions, 23.11)
    RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_flow_table_query, 24.11)
  Neither exists in main. Use 26.11.

Error: single-TC ports now always create a QoS entry, but QoS table
  config returns early for num_rx_tc <= 1.

Warning: ip_addr_offset not adjusted when a preceding non-IP extract
  is removed; second IP offset uses ip_addr[1].max_size instead of
  ip_addr[0].max_size.

Warning: flow_destroy does LIST_REMOVE then frees only on full
  success; "ret |= -errno" ORs errnos; error never set.

Warning: query does a table dump, discards it, returns 0 for any
  action. Return -ENOTSUP.

Warning: validate ignores unsupported actions that create rejects;
  out-of-range group silently becomes QoS group 0.

Warning: fprintf(stderr, ...) in dpaa2_extract_ip_addr_add(); ~350
  lines of static inline flow helpers in dpaa2_ethdev.h. Use
  DPAA2_PMD_ERR, move helpers into dpaa2_flow.c.

Warning: dev_init returns 0 on extract_param/entry_map alloc failure.

Warning: drv_qos_entries_per_tc undocumented, atoi() into uint16_t.

Warning: commit log does not match code (env var vs devarg, flag
  names, query, JUMP). Split: data model, handler table, devargs,
  actions_update, miss actions, query, RSS.


[22/65] net/dpaa2: reimplement RSS distribution via rte_flow

Error: tbl_profile->rss_flow is the internal dpaa2_generic_flow, not
  the rte_flow handle; rte_flow_destroy() on it does LIST_REMOVE on the
  wrong type. rss_hash_update/reta_update always -EINVAL once RSS is
  active.

Error: rte_pmd_dpaa2.h now includes <ethdev_driver.h> and the inline
  derefs rte_eth_devices[]; installed header no longer usable by apps.
  The inline also leaks the flow handle and passes queue = NULL with
  queue_num > 0.

Warning: stable symbol rte_pmd_dpaa2_set_custom_hash removed (now an
  experimental inline). 26.11 is an ABI window, but the removal needs
  a deprecation notice in a prior release.

Warning: creating any FS flow destroys the PMD's RSS flow; after that
  rss_hash_update silently returns 0.

Warning: rss_hash_update returns 0 with nothing programmed when no
  RSS flow exists.

Warning: PMD-created RSS/DCB/miss flows live on the user's flow list;
  rte_flow_flush() removes them and leaves rss_flow/dcb_flow[] stale
  (also 26, 27). Use internal helpers.


[25/65] net/dpaa2: support rte_mtr and METER rte_flow action

Error: METER unreachable
    } else if (meter_action->type == RTE_FLOW_ACTION_TYPE_METER_MARK)
  repeats the first test. Compare with RTE_FLOW_ACTION_TYPE_METER.

Error: rte_mtr rates are bytes/s uint64_t; policer cir/eir are
  uint32_t Kbps. Programs 125x too high and truncates.
  Fix: cir_kbps = cir * 8 / 1000; reject > UINT32_MAX at profile_add.

Warning: profile/policy delete frees meters still in use (no -EBUSY),
  duplicate ids accepted, meter_destroy ignores bound flows; objects
  leak on close; rte_zmalloc for CPU-only lists.

Warning: rte_spinlock_init(&priv->meter_lock) in mtr_ops_get, which
  runs on every rte_mtr call. Control ops are not thread safe by
  convention; drop the lock.

Warning: packet_mode > 1 used as a hidden unit selector; meter flow
  accepts any pattern; DO_NOT_RESET_COUNTERS sent to old MC.

Warning: dpaa2_flow_create_rss_flow() destroys user meter flows on
  reconfigure; later rte_flow_destroy() is use-after-free.

Warning: meter_profile_update/meter_policy_update only store the new
  id; the DPNI policer is never reprogrammed, so updating a bound meter
  has no effect. Reprogram or return -ENOTSUP while in use.


[26/65] net/dpaa2: program flow table miss actions via rte_flow

Warning: miss-action errors only logged in dev_configure; QoS call
  made when qos_entries == 0 logs ERR on every configure. Also ~170
  lines of unrelated code motion and errno changes not in the log.


[27/65] net/dpaa2: support DCB Rx mode via rte_flow

Error: dcb_tc[] is indexed by priority and holds the TC; code treats
  it the other way round.
  Fix: for (prio = 0; prio < RTE_ETH_DCB_NUM_USER_PRIORITIES; prio++)
           dpaa2_setup_flow_dcb_dist(dev, prio, dcb_tc[prio]);

Error: dcb_flow[] cleared only at close; stop/configure fails with
  -ENODATA on the second configure.

Warning: dcb_info reports identity mapping, not the configured one.


[29/65] bus/fslmc: support DPCI peer and dynamic queues

Error: "uint16_t expected = 0;" moved out of TAILQ_FOREACH in
  rte_dpaa2_alloc_dpci_dev(); a failed CAS leaves expected == 1, so
  the next in-use DPCI is handed out again. Same in 30 for DPIO.
  Fix: declare expected inside the loop.

Error: dpci_get_peer_attributes() decodes with dpci_rsp_get_attr;
  use dpci_rsp_get_peer_attr (num_of_priorities at byte 8).

Error: DPCI Rx DQ storage alloc removed; raw/dpaa2_cmdif still does
  rxq->q_storage[0]->dq_storage[0] -> NULL deref.

Error: enqueue validation failures "goto send_partial" without
  frames_to_send = loop; garbage descriptors pushed to QBMan (29-30,
  fixed in 31). rte_errno never set (still at 65).

Error: dpaa2_eventdev_create() do/while over free DPCON/DPCI pairs
  has no bound; more than 16 pairs write past priv->evq_info[16].
  Fixed in 41/42; keep the bounded for loop here.

Warning: ORDERED and NONSEQ_MODE dropped while QUEUE_ALL_TYPES still
  advertised; not in log. 61 re-adds them; do not drop them here.

Warning: free does fetch_sub on a 0/1 flag; no detach resets cb/dest,
  so a freed DPCI returns -EBUSY on reuse.


[31/65] event/dpaa2: rework event port model and DPCI handling

Error: DCA consumed on the wrong portal
  Dequeue records held DQRR on portal->dpio_dev; net Tx, Tx adapter
  and dpaa2_sec still use DPAA2_PER_LCORE_PORTAL/DQRR_*.

Error: port_link: "ret = rte_event_port_unlink(...); if (ret) return
  ret;" unlink returns the count unlinked; second link returns it
  without linking (31-40). Linking must add, not replace.

Error: dequeue_wait still uses DPAA2_PER_LCORE_DPIO; dev_stop drains
  with dequeue_burst(.., 1, 1) from the control thread, so
  rte_event_dev_stop() can crash even with timeout 0 (until 43).

Error: dequeue counts an unwritten event when rxq has no cb.

Error: enqueue livelock: after validation error or env_pool empty,
  "while (nb_events)" restarts at the same event forever. Return
  num_tx with rte_errno.

Error: dpaa2_ethq->ev.queue_id = eth_rx_queue_id overrides the Rx
  adapter's event queue id; flow_id forced regardless of
  FLOW_ID_VALID.

Warning: rte_delay_us(10000) in enqueue/dequeue on unlinked ports,
  under port_lock.

Warning: Rx adapter queue_del made a no-op until 37.

Warning: RTE_DPAA2_EVENT_PORT_CFG_ATOMIC uses bit 31 of the library
  owned event_port_cfg, declared in the net header.

Warning: 1024-entry mempool with 512 cache per DPCI Rx queue at probe
  (~1 MB hugepage each), whether used or not; caps in-flight events at
  1024 while max_num_events reports INT32_MAX - 1.


[32/65] event/dpaa2: fix Tx adapter enqueue for mixed destinations

Warning: SAME_DEST guarantees one port/queue; the old code was right.
  Dropping rte_eth_tx_burst() breaks non-dpaa2 ethdevs, which caps
  report as INTERNAL_PORT and get cast to struct dpaa2_queue. Drop or
  restrict caps to dpaa2 ports.


[34/65] event/dpaa2: add DPCON based standalone Rx scheduler

Error: pull size not clamped: nb_pkts passed to the pull descriptor
  instead of pull_size; storage holds dpaa2_dqrr_size entries.

Error: "uint8_t priority_step = 256 / num_priorities" is 0 for
  num_priorities == 1; then divides by it. Use unsigned int.

Warning: getenv("DPAA2_SCHEDULE_RX_PREFETCH"). Use the mode argument
  added in 35.

Warning: destroy leaks DQ storage; q_storage[rte_lcore_id()] with no
  LCORE_ID_ANY check; scheduler API declared in the net header, no
  doxygen; max_prio returns num_priorities not num_priorities - 1.


[35/65] event/dpaa2: add push mode to DPCON Rx scheduler

Error: first rx on each lcore issues MC commands (attach, static
  dequeue channel) and writes shared port_queue[].configured from
  concurrent workers. Attach on the control path.

Error: rte_dpaa2_scheduler_max_prio() derefs dpcon_dev[0], NULL in
  push mode until lcore 0 receives.

Warning: push mode allocates an unused DPCI per lcore.

Warning: push mode leaves queue_conf zeroed; sched_type 0 is ORDERED,
  so every rxq gets the ordered cb and an ORP. Set PARALLEL for both
  modes in scheduler_add().


[36/65] event/dpaa2: drain Rx scheduler queues on destroy

Warning: drains other lcores' portals from the control thread;
  prefetch pulls left by workers never consumed; rte_delay_ms(1) per
  drained packet.


[37/65] event/dpaa2: track and detach attached Rx queues

Error: push detach loops attach_num (lcore count) over port_queue[];
  NULL eth_dev or rxqs left bound to a freed DPCON.

Error: queue_del(-1) detaches every ethdev's rxqs, not this port's.

Error: Rx adapter stop drains all event ports from the control thread
  while workers run, then detaches; start is a no-op, so stop/start
  loses Rx. Log does not match.

Error: evq_info[].dpni_rxqs[] keep rxq pointers past ethdev close;
  eventdev close detaches freed memory with priv->hw NULL.

Warning: attach not idempotent (re-add double counts); close skipped
  when never started (leaks DPIOs).


[38/65] net/dpaa2: add multi-port Tx API

Warning: "struct dpaa2_queue *txq[nb_pkts]" VLA; no port/txq_id
  validation; no doxygen; per-packet failure returns short; copy-path
  mbufs freed before enqueue are reported unsent (double free).


[39/65] event/dpaa2: limit attached Rx flows per event queue

Error: max_event_queue_flows lowered to 1024 while queue_def_conf
  still sets nb_atomic_flows 2048; rte_event_queue_setup() with
  defaults fails. Use a separate attach bound.

Warning: dpni_rxq_num widened to uint16_t but eth_queue_del() loops
  with uint8_t j, k; more than 255 rxqs never terminates.


[40/65] eventdev: fix port link/unlink callback return documentation

Warning: library change in a vendor series; send standalone to the
  eventdev maintainer with Fixes:. "Number of unlinks successfully
  established" reads wrong; drop the NXP copyright on a Cavium header
  for a comment fix.


[41/65] event/dpaa2: allow event queue link to multiple ports

Warning: port_unlink indexes pos[16]/evq_infos[16] by nb_unlinks,
  which can exceed 16 with repeated queue ids. Stack overflow.

Warning: enqueue still rejects queues not linked to the port
  (series item 5). Main crashes there instead; both violate the API.


[42/65] event/dpaa2: report available DPIO count and fix create cleanup

Error: rte_atomic16_read() no longer exists in for-main; 42 and 43
  fail to build (implicit declaration).
  Fix: rte_atomic_load_explicit(&dpio_dev->ref_count,
       rte_memory_order_relaxed)

Warning: failed create still calls event_dev_probing_finish() and
  never releases the eventdev (also 64). The create leak and info_get
  count fixes need Fixes/stable (series item 1).

Warning: DPAA2_EVENTQ_LINK_CONF_MAX rewrite and unused
  DPAA2_EVENT_MAX_PORTS not in log.


[44/65] bus/fslmc: consolidate DPIO interrupt setup

Warning: existing getenv() thresholds now applied in the bus
  allocator to every interrupt DPIO; sscanf return unchecked. The
  set_inhibit change is a fix (series item 1).

Warning: ethrx portals now armed at alloc; net rx_queue_intr_enable
  then returns early and gets holdoff 0xff. 52 reverts it.


[45/65] event/dpaa2: honor configured dequeue timeout

Warning: timeout_ticks honoured without PER_DEQUEUE_TIMEOUT, and in
  global mode timeout_ticks == 0 still waits dequeue_timeout_ns;
  64-bit divide on every burst; ns * event_hz overflows; ms truncated
  to int for epoll_wait.

[46/65] bus/fslmc: use EAL API for DPIO interrupt

Warning: event driver logs with DPAA2_PMD_DP_DEBUG (net logtype,
  reached through an accidental include chain); dpaa2_logtype_pmd is
  not exported, so shared builds with DP debug fail to link. Use the
  eventdev log macro.


[47/65] bus/fslmc: defer DPIO interrupt setup and bind portal to worker

Error: driver writes cpufreq scaling_governor and /proc/irq affinity
  from dpaa2_event_portal_io_prepare() (fast path). Drop the governor
  code; do affinity/stashing at port setup.

Error: "cpu = rte_lcore_id()" used as physical CPU for IRQ affinity,
  governor and stashing. Use dpaa2_get_core_id().

Warning: eventfd leaked per intr init/deinit cycle.

Warning: log mentions an "unlikely" hunk that does not exist; three
  helpers exported then made static in 52.


[48/65] bus/fslmc: move Tx SG mempool to fslmc bus

Error: Rx SG walk bound removed
  -     while (!DPAA2_SG_IS_FINAL(sge) && i < DPAA2_MAX_SGS) {
  +     while (!DPAA2_SG_IS_FINAL(sge)) {
  Log claims it is now bounded. Restore the bound.

Warning: SG pool created unconditionally at bus probe, also for
  crypto-only and secondary; NULL result ignored.


[49/65] net/dpaa2: move DPNI endpoint lookup out of the fslmc bus

Warning: fixes ep_dev_type/ep_name never being set in main (series
  item 1). Say so, add Fixes, move before 17.


[50/65] net/dpaa2: add APIs to query device info and set default action

Error: new symbols tagged 25.11
    RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_rx_queue_info_get, 25.11)
    RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_dev_info_get, 25.11)
  Use 26.11. No doxygen or release notes for the three functions.


[51/65] net/dpaa2: consolidate dequeue paths and optimize fast path

Error: scheduler prefetch priming inverted
  "if (likely(q_storage->active_dqs))" never primes on first call,
  then derefs NULL dq_storage. Use if (unlikely(!...)).

Warning: tx_conf "if (refcnt_read > 1) refcnt_update(-1)" races with
  the other owner and skips chained segments. Use rte_pktmbuf_free().

Warning: error queue dump uses q_storage[0] from all lcores.


[52/65] net/dpaa2: bind per-queue DPIO for rx-queue interrupts

Error: Rx burst now sets IRQ affinity, stashing and governor on first
  call (see 47). Releasing a queue or port never polled passes
  cpu_affine -1 to the governor restore, which restores every CPU,
  including ones other queues still use.

Warning: intr_enable returns early when napi_armed, CDAN is one-shot;
  dev_started check removed. Holdoff default changed from 0 to 0xff.


[53/65] net/dpaa2: add API to clean Tx confirmation queue

Error: rte_pmd_dpaa2_clean_tx_conf() uses tx_queues[txq_id] without
  checking txq_id < nb_tx_queues or NULL.

Warning: no doxygen; must run on the lcore owning the Tx queue (races
  with tx_burst).


[54/65] event/dpaa2: fix DQRR held buffer accounting on enqueue

Warning: bug is in released code. Add
  Fixes: b75061260c34 ("event/dpaa2: add enqueue and dequeue functionality")
  Cc: [email protected]
  and send ahead of the refactor.


[55/65] bus/fslmc: store dequeue dpio in mbuf seq dynfield

Warning: seqn dynfield grows to 16 bytes, 8-aligned, registered at
  bus probe for every user. Store a DPIO index, not a pointer.


[56/65] bus/fslmc: use explicit flags for mbuf seqn encoding

Error: rewrites the UB shift in dpaa2_sec and keeps it (series 1).
  Fix: ~(UINT64_C(1) << (*dpaa2_seqn(m) & QBMAN_EQCR_DCA_IDXMASK))

Warning: cross-driver encoding mismatch is a real bug; log calls it
  "fragile". dpaa2_sec is even inconsistent with itself (ordered path
  decodes seqn - 1, dequeue stores DCA | idx). Describe it,
  Fixes/stable.


[57/65] net/dpaa2: unify tx burst path for ordered and atomic enqueue

Error: dqrr_held[loop] = ~(1 << idx) then HELD &= ~dqrr_held[i];
  clears all other held bits. Fixed in 59; fold it here.

Error: "uint32_t flags[MAX_TX_RING_SLOTS]" uninitialized, restored
  into seqn of every unsent mbuf. Zero per slot, restore only if set.

Error: enqueue retry exhaustion: break with ret == 0, then
  "if (nb_pkts > 0 && !ret && !order) goto tx_again" skips the unsent
  prepared frames, which the copy path already freed. Return value is
  no longer a prefix. Same in 65.

Info: rte_vlan_insert() failure still returns short (pre-existing,
  series item 1).


[58/65] crypto/dpaa2_sec: unify enqueue burst path for ordered enqueue

Error: "int32_t ret, order = false;" then "if (ret >= 0 && order)"
  reads ret uninitialized when ops[0] is ordered. int32_t ret = 0.


[59/65] bus/fslmc: track atomic DCA context per dequeue dpio

Error: on DPIO mismatch the mbuf keeps DCA|idx and the origin portal
  keeps HELD and held_bufs.mbuf[idx]; origin later writes through a
  freed/reused mbuf. Clear seqn on mismatch, release by index only.

Warning: statement-expression macros test &eqdesc[loop]/&flags[loop]
  for NULL and assign unparenthesized args. Make them static inline
  functions.


[60/65] bus/fslmc: move enqueue response descriptors to per-queue

Error: every ORP frame uses priv->tx_vq[0]->eq_resp from all lcores
  without a lock; the old ring was per DPIO.

Error: responses recorded on tx_vq[0] but only the caller's queues
  are drained; Tx on queue != 0 stops after 127 ORP frames.

Error: slots reserved at build time never complete for frames not
  enqueued; queue runs out and dpaa2_queue_eqresp_free() spins forever.

Error: dpaa2_sec_queue_pair_release() frees fle_pool, then
  dpaa2_queue_eqresp_free() puts FLEs back into it. Swap the order.

Warning: eqresp pool leaked on tx_queue_setup re-setup;
  DPAA2_ORDER_DEBUG dead code and USER1 logger in bus header; add
  RTE_BUILD_BUG_ON(!rte_is_power_of_2(DPAA2_EQRESP_MAX_NUM)).


[61/65] event/dpaa2: add ordered schedule type support

Warning: ORP restore keyed on event->sched_type (the next queue's
  type); ordered -> atomic skips restoration, ordered -> parallel or
  direct Tx leaks the ORP flag. Decide on the seqn flag.

Warning: ORDERED accepted but RTE_EVENT_DEV_CAP_ORDERED not set and
  ordered_scheduling not in features/dpaa2.ini.

Warning: dpaa2_dq_order_save() writes the mbuf dynfield for non-mbuf
  events.


[62/65] bus/fslmc: make DPAA2 ORP/ODP ordering per-queue

Error: strict ORP on a DPCI queue uses a NULL eq_resp pool
  The strict bit now comes from the mbuf. An event from a strict-ORP
  DPNI or dpaa2_sec queue forwarded to an ORDERED event queue reaches
  dpaa2_eq_set_order_desc() with a DPCI tx queue, which never got
  dpaa2_queue_eqresp_create(): pool_len 0, mask 0xffffffff, and QBMan
  DMAs the response to IOVA(NULL + n * 64). Nothing drains it.
  Fix: no response (loose) on the eventdev path; return -EINVAL when
  eqresp_pool is NULL.

Warning: odpid not masked; bits 13..15 land in STRICT/ORP/DCA.
    ((id) & DPAA2_EQCR_OPRID_MASK) << DPAA2_EQCR_OPRID_SHIFT

Warning: bus, net, crypto, event and a devarg in one patch. Removing
  DPAA2_STRICT_ORDERING_ENABLE silently drops strict ordering for
  existing users (the log claims it is still honoured); new devarg
  name differs from dpaa2_sec's drv_strict_order. Split, reuse the
  name, release note.


[64/65] event/dpaa2: do not fail device creation on DPCI errors

Warning: -ENODEV path leaves a registered, probed eventdev. Release
  before event_dev_probing_finish(). Partially attached queues still
  accept all sched types in queue_setup.


[65/65] net/dpaa2: add Tx fast path for no-confirmation case

Error: dpaa2_dev_tx_fast() ignores DPAA2_IEEE1588_TX_TS_FLAG; one-step
  PTP stops working on the default NO_CONF config. Take the fast path
  only when the flag is clear.

Error: retry exhaustion hole duplicated from 57.

Warning: "struct qbman_fd fd_arr[MAX_TX_RING_SLOTS] = {0};" zeroes
  1 KiB per burst before dispatching to the fast path. Move it.

Reply via email to