I missed your earlier review comments, and I apologize for the oversight. Regarding the AI review, I assumed the result from the initial patchset, which passed cleanly (https://mails.dpdk.org/archives/test-report/2026-October/1060187.html), would still apply, since the code logic has not changed between versions. However, the latest run does report new issues that also need to be addressed. I will address all of the points raised and aim to send a v4 before the code freeze tomorrow.
Sorry again, Shai > -----Original Message----- > From: Stephen Hemminger <[email protected]> > Sent: Monday, October 19, 2026 7:34 PM > To: Brandes, Shai <[email protected]> > Cc: [email protected] > Subject: RE: [EXTERNAL] [PATCH v3 00/13] ENA release 2.15.0 > > CAUTION: This email originated from outside of the organization. Do not click > links or open attachments unless you can confirm the sender and know the > content is safe. > > > > On Sun, 18 Oct 2026 12:45:41 +0300 > Shai Brandes <[email protected]> wrote: > > > Hello all, > > This series upgrades HAL and fixes two PHC correctness issues, an LLQ > > feature version not communicated to the device, and a failed LLQ > > configuration zeroing the negotiated tx_max_header_size. > > Additionally it adds n-tuple Rx flow steering support through the rte_flow > API. > > Review and comments are welcome > > > > Best regards, > > Shai Brandes > > > I am disappointed that you did not address the AI identified problems in last > version. > > Review of [PATCH v3 00/13] net/ena: 2.15.0 (bundle 2204) > > Applied to main at 9a45341f18 (26.11-rc1); every commit built with - > Dwerror=true (gcc, x86-64). > > Series level > ------------ > > There is no changelog. Against the previous posting, v3 only rebases, keeps > ena_com_execute_admin_command() exported in 01, and fixes a typo in 11. > None of the earlier review comments are addressed; they are repeated below. > > Error: patch 04 still breaks the build. > > Info: the stable fixes (02, 03, 06, 10) sit behind refactors, and > 06 and 10 depend on context from 01, 05 and 09. Put the fixes first so they > backport without rework. > > > [PATCH v3 01/13] net/ena: avoid using un-needed admin response buffers > ---------------------------------------------------------------------- > > Warning: undocumented behaviour change. Besides the move, the missing- > interrupt fallback in > ena_com_wait_and_process_admin_cq_interrupts() changes from > > admin_queue->polling = true; > > to > > ena_com_set_admin_polling_mode(admin_queue->ena_dev, true); > > which also writes ENA_REGS_ADMIN_INTR_MASK to the device. Say so in the > commit message, or split the wait path rework into its own patch. > > > [PATCH v3 03/13] net/ena/base: fix missing barriers in PHC timestamp read > ------------------------------------------------------------------------ > > Warning: wrong Fixes tag. The req_id poll loop without a barrier comes from > f73f53f7dc7a (v23.11); a14be4dd8693 (v25.11) only added the statistics > block. As tagged, 23.11 and 24.11 will not pick this up. Use: > > Fixes: f73f53f7dc7a ("net/ena: upgrade HAL") > > > [PATCH v3 04/13] net/ena/base: rename bounce buffer references > ------------------------------------------------------------- > > Error: build break. The member is renamed in ena_com.h but ena_eth_com.c > still uses the old name until patch 05: > > ena_eth_com.c:160: error: 'struct ena_com_llq_pkt_ctrl' has no > member named 'curr_bounce_buf' > > Move the ena_eth_com.c renames (curr_bounce_buf, plus > write_header_to_bounce and close_bounce_buffer, which 05 also renames > without mentioning it) into this patch. 05 is then only the > ena_com_sq_is_llq() > helper, matching its subject. > > > [PATCH v3 08/13] net/ena/base: deduplicate meta caching config flag > ------------------------------------------------------------------ > > Info: removing the field leaves two consecutive blank lines in struct > ena_com_io_sq after mem_queue_type. Drop one. > > > [PATCH v3 09/13] net/ena/base: split LLQ info into datapath and config > --------------------------------------------------------------------- > > Warning: this is not "No functional change". The burst limit divisor changes: > > - llq_default_cfg->llq_ring_entry_size_value; > + llq_info->common.desc_list_entry_size; > > They differ when the device does not support the default entry size and the > fallback above picks another one. With a 128 byte default and a 256 byte > fallback, the old code allows twice as many entries per burst as the device > accepts. That is a real bug, present since the LIMIT_TX_BURST support went in. > Split it out: > > net/ena/base: fix Tx burst limit with fallback entry size > > Fixes: b68309be44c0 ("net/ena/base: update communication layer > for the ENAv2") > Cc: [email protected] > > and keep 09 a pure refactor. > > Info: continuation lines of the descs_num_before_header assignments are not > indented: > > llq_info->common.descs_num_before_header = > llq_default_cfg->llq_num_decs_before_header; > > Indent the second line one more tab, or keep it on one line. > > > [PATCH v3 11/13] net/ena: support flow API for n-tuple Rx steering > ----------------------------------------------------------------- > > Warning: an item without spec is rejected for IPV4, IPV6, TCP and UDP ("IPv4 > item requires spec"). In rte_flow a NULL spec means "match any packet of this > protocol". testpmd passes spec == NULL for items given without fields, so the > obvious rule > > flow create 0 ingress pattern eth / ipv4 / tcp dst is 80 / end > actions queue index 1 / end > > fails. Treat NULL spec as protocol presence with zero masks, e.g.: > > case RTE_FLOW_ITEM_TYPE_IPV4: > ... > has_ipv4 = true; > if (spec == NULL) > break; > if (mask == NULL) > mask = &rte_flow_item_ipv4_mask; > > Same for IPV6, TCP and UDP. > > Warning: secondary process. All other admin commands (MTU, RSS, > stats) go through ENA_PROXY because only the primary owns the admin > queue. The flow ops call ena_com_flow_steering_*() directly, so rte_flow from > a secondary submits admin commands from the wrong process. Proxy them, > or simply refuse in ena_flow_ops_get(): > > if (rte_eal_process_type() != RTE_PROC_PRIMARY) > return -E_RTE_SECONDARY; > > Warning: features/ena.ini adds the [rte_flow items] and [rte_flow actions] > tables but not "Flow API = Y" under [Features]. > > Info: > - ena_infos_get(): the two "&= ~" lines are no-ops (ENA never sets > RTE_ETH_DEV_CAPA_FLOW_RULE_KEEP or > RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE) > and dev_infos_get should not write dev->data. Drop them and the > comments. > - ena_flow_create() parses the pattern twice, once inside > ena_flow_validate(). Split the attr/started checks into a helper > and call ena_flow_parse() once. > - adapter->flow_rule_count duplicates > ena_dev->flow_steering.active_rules_cnt. Use the base counter. > - ena_flow_ops_get() logs WARNING when steering is unsupported. > testpmd calls rte_flow_flush() on port close, so this fires on > every close. Use DEBUG or no log. > - ena_flow_query() only returns ENOTSUP; leave .query NULL and > ethdev returns ENOSYS. > - ena_com_flow_steering_remove_rule() and _remove_all_rules() pass > a response buffer they never read. Use > ena_com_execute_admin_command_no_resp() from patch 01. > - ena_com_flow_steering_destroy() leaves dangling pointers. End it > with memset(flow_steering, 0, sizeof(*flow_steering)) like > ena_com_rss_destroy(). > > > [PATCH v3 12/13] net/ena/base: remove x86 Tx LLQ write barrier > ------------------------------------------------------------- > > Warning: arm_wmb() is a no-op on every non-ARM architecture, not just x86. > ppc64le, riscv and loongarch are weakly ordered and the driver still builds > there. The argument for dropping the barrier (UC doorbell store flushes WC > buffers) is x86 specific, so make the test x86 specific: > > #if defined(RTE_ARCH_X86) > #define ena_llq_wmb() do { } while (0) > #else > #define ena_llq_wmb() rte_wmb() > #endif > > (rte_io_wmb() everywhere is the other option, if Graviton testing shows dmb > oshst is enough; on x86 it is a compiler barrier.) > > Info: the new comment in ena_com_write_bounce_buffer_to_dev() is > 20 lines, half of it history of the old wmb(). History belongs in the commit > message; keep the comment to what the barrier orders and why x86 does not > need it.

