* [PATCH 01/15] net/dpaa2: fix uninitialized variable issue [not found] <20251014055605.1303410-1-prashant.gupta_3@nxp.com> @ 2025-10-14 5:55 ` Prashant Gupta 2025-10-14 5:55 ` [PATCH 02/15] net/dpaa2: fix to free buffers from error queue Prashant Gupta ` (4 subsequent siblings) 5 siblings, 0 replies; 8+ messages in thread From: Prashant Gupta @ 2025-10-14 5:55 UTC (permalink / raw) To: Hemant.agrawal, g.singh; +Cc: stable, Prashant Gupta Initialize the kg_cfg structure before use in rte_pmd_dpaa2_set_custom_hash(). This resolves an issue with uninitialized memory access. Fixes: 5f822962498e ("net/dpaa2: support custom hash key") Cc: stable@dpdk.org Signed-off-by: Prashant Gupta <prashant.gupta_3@nxp.com> --- .mailmap | 1 + drivers/net/dpaa2/base/dpaa2_hw_dpni.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.mailmap b/.mailmap index 0b043cb0c0..c260830f20 100644 --- a/.mailmap +++ b/.mailmap @@ -1261,6 +1261,7 @@ Piotr Skajewski <piotrx.skajewski@intel.com> Potnuri Bharat Teja <bharat@chelsio.com> Pradeep Satyanarayana <pradeep@us.ibm.com> Prashant Bhole <bhole_prashant_q7@lab.ntt.co.jp> +Prashant Gupta <prashant.gupta_3@nxp.com> Prashant Upadhyaya <prashant.upadhyaya@aricent.com> <praupadhyaya@gmail.com> Prateek Agarwal <prateekag@cse.iitb.ac.in> Prathisna Padmasanan <prathisna.padmasanan@intel.com> diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c index b1d473429a..13825046d8 100644 --- a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. - * Copyright 2016-2021,2023-2024 NXP + * Copyright 2016-2021,2023-2025 NXP * */ @@ -60,6 +60,7 @@ rte_pmd_dpaa2_set_custom_hash(uint16_t port_id, return -ENOMEM; } + memset(&kg_cfg, 0, sizeof(struct dpkg_profile_cfg)); kg_cfg.extracts[0].type = DPKG_EXTRACT_FROM_DATA; kg_cfg.extracts[0].extract.from_data.offset = offset; kg_cfg.extracts[0].extract.from_data.size = size; -- 2.43.0 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 02/15] net/dpaa2: fix to free buffers from error queue [not found] <20251014055605.1303410-1-prashant.gupta_3@nxp.com> 2025-10-14 5:55 ` [PATCH 01/15] net/dpaa2: fix uninitialized variable issue Prashant Gupta @ 2025-10-14 5:55 ` Prashant Gupta 2025-10-14 5:55 ` [PATCH 03/15] net/dpaa2: fix L3/L4 csum results in packet parse Prashant Gupta ` (3 subsequent siblings) 5 siblings, 0 replies; 8+ messages in thread From: Prashant Gupta @ 2025-10-14 5:55 UTC (permalink / raw) To: Hemant.agrawal, g.singh; +Cc: stable, Prashant Gupta Free a packet mbuf back into its original mempool. Fixes: 4690a6114ff6 ("net/dpaa2: enable error queues optionally") Cc: stable@dpdk.org Signed-off-by: Prashant Gupta <prashant.gupta_3@nxp.com> --- drivers/net/dpaa2/dpaa2_rxtx.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c index 5bd377d4e6..656a3a423f 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -708,6 +708,7 @@ dump_err_pkts(struct dpaa2_queue *dpaa2_q) rte_hexdump(stderr, "Error packet", v_addr, DPAA2_GET_FD_OFFSET(fd) + DPAA2_GET_FD_LEN(fd)); + rte_pktmbuf_free(mbuf); dq_storage++; num_rx++; } while (pending); -- 2.43.0 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 03/15] net/dpaa2: fix L3/L4 csum results in packet parse [not found] <20251014055605.1303410-1-prashant.gupta_3@nxp.com> 2025-10-14 5:55 ` [PATCH 01/15] net/dpaa2: fix uninitialized variable issue Prashant Gupta 2025-10-14 5:55 ` [PATCH 02/15] net/dpaa2: fix to free buffers from error queue Prashant Gupta @ 2025-10-14 5:55 ` Prashant Gupta 2025-10-14 5:55 ` [PATCH 04/15] net/dpaa2: fix to recv packets with additional parse errors Prashant Gupta ` (2 subsequent siblings) 5 siblings, 0 replies; 8+ messages in thread From: Prashant Gupta @ 2025-10-14 5:55 UTC (permalink / raw) To: Hemant.agrawal, g.singh; +Cc: stable, Brick Yang From: Brick Yang <brick.yang@nxp.com> Layer3 and layer4 checksum validation and error status is part of word1 of annotation area, but driver is looking into wrong word. This patch fixes the checksum error status in packet parsing. Fixes: 94d31549c380 ("net/dpaa2: support Rx checksum offload in slow parsing") Cc: stable@dpdk.org Signed-off-by: Gagandeep Singh <g.singh@nxp.com> Signed-off-by: Brick Yang <brick.yang@nxp.com> --- drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h | 10 +++++----- drivers/net/dpaa2/dpaa2_rxtx.c | 17 ++--------------- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h b/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h index d156b07087..a670098958 100644 --- a/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h +++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. - * Copyright 2016,2019 NXP + * Copyright 2016,2019,2022,2024 NXP * */ @@ -304,13 +304,13 @@ struct dpaa2_faead { #define DPAA2_ETH_FAS_PHE 0x00000020 #define DPAA2_ETH_FAS_BLE 0x00000010 /* L3 csum validation performed */ -#define DPAA2_ETH_FAS_L3CV 0x00000008 +#define DPAA2_ETH_FAS_L3CV 0x0000000800000000 /* L3 csum error */ -#define DPAA2_ETH_FAS_L3CE 0x00000004 +#define DPAA2_ETH_FAS_L3CE 0x0000000400000000 /* L4 csum validation performed */ -#define DPAA2_ETH_FAS_L4CV 0x00000002 +#define DPAA2_ETH_FAS_L4CV 0x0000000200000000 /* L4 csum error */ -#define DPAA2_ETH_FAS_L4CE 0x00000001 +#define DPAA2_ETH_FAS_L4CE 0x0000000100000000 #ifdef __cplusplus } diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c index 656a3a423f..6cb91e67d4 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -201,14 +201,10 @@ dpaa2_dev_rx_parse_slow(struct rte_mbuf *mbuf, goto parse_done; } - if (BIT_ISSET_AT_POS(annotation->word8, DPAA2_ETH_FAS_L3CE)) + if (BIT_ISSET_AT_POS(annotation->word1, DPAA2_ETH_FAS_L3CE)) mbuf->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_BAD; - else - mbuf->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_GOOD; - if (BIT_ISSET_AT_POS(annotation->word8, DPAA2_ETH_FAS_L4CE)) + else if (BIT_ISSET_AT_POS(annotation->word1, DPAA2_ETH_FAS_L4CE)) mbuf->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD; - else - mbuf->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD; if (BIT_ISSET_AT_POS(annotation->word4, L3_IP_1_FIRST_FRAGMENT | L3_IP_1_MORE_FRAGMENT | @@ -248,15 +244,6 @@ dpaa2_dev_rx_parse(struct rte_mbuf *mbuf, void *hw_annot_addr) DPAA2_PMD_DP_DEBUG("(fast parse) Annotation = 0x%" PRIx64 "\t", annotation->word4); - if (BIT_ISSET_AT_POS(annotation->word8, DPAA2_ETH_FAS_L3CE)) - mbuf->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_BAD; - else - mbuf->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_GOOD; - if (BIT_ISSET_AT_POS(annotation->word8, DPAA2_ETH_FAS_L4CE)) - mbuf->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD; - else - mbuf->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD; - if (unlikely(dpaa2_print_parser_result)) dpaa2_print_parse_result(annotation); -- 2.43.0 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 04/15] net/dpaa2: fix to recv packets with additional parse errors [not found] <20251014055605.1303410-1-prashant.gupta_3@nxp.com> ` (2 preceding siblings ...) 2025-10-14 5:55 ` [PATCH 03/15] net/dpaa2: fix L3/L4 csum results in packet parse Prashant Gupta @ 2025-10-14 5:55 ` Prashant Gupta 2025-10-14 5:55 ` [PATCH 05/15] net/dpaa2: fix error frame dump issue Prashant Gupta 2025-10-14 5:55 ` [PATCH 06/15] net/dpaa2: fix flow rule's resizing issue Prashant Gupta 5 siblings, 0 replies; 8+ messages in thread From: Prashant Gupta @ 2025-10-14 5:55 UTC (permalink / raw) To: Hemant.agrawal, g.singh; +Cc: stable, Brick Yang From: Brick Yang <brick.yang@nxp.com> Also receive packets with HW parser length errors. Thus this option allow to let HW drop packets for any kind of parser errors. Fixes: 4690a6114ff6 ("net/dpaa2: enable error queues optionally") Cc: stable@dpdk.org Signed-off-by: Brick Yang <brick.yang@nxp.com> --- drivers/net/dpaa2/dpaa2_ethdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 41678ce09b..0fd577c448 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -1240,7 +1240,7 @@ dpaa2_dev_start(struct rte_eth_dev *dev) err_cfg.errors = DPNI_ERROR_L3CE | DPNI_ERROR_L4CE; /* if packet with parse error are not to be dropped */ - err_cfg.errors |= DPNI_ERROR_PHE; + err_cfg.errors |= DPNI_ERROR_PHE | DPNI_ERROR_BLE; err_cfg.error_action = DPNI_ERROR_ACTION_CONTINUE; } -- 2.43.0 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 05/15] net/dpaa2: fix error frame dump issue [not found] <20251014055605.1303410-1-prashant.gupta_3@nxp.com> ` (3 preceding siblings ...) 2025-10-14 5:55 ` [PATCH 04/15] net/dpaa2: fix to recv packets with additional parse errors Prashant Gupta @ 2025-10-14 5:55 ` Prashant Gupta 2025-10-14 5:55 ` [PATCH 06/15] net/dpaa2: fix flow rule's resizing issue Prashant Gupta 5 siblings, 0 replies; 8+ messages in thread From: Prashant Gupta @ 2025-10-14 5:55 UTC (permalink / raw) To: Hemant.agrawal, g.singh; +Cc: stable, Jun Yang From: Jun Yang <jun.yang@nxp.com> Dump error frame payload according to mbuf format. Meanwhile, support dumping parser result of error frame. Fixes: 4690a6114ff6 ("net/dpaa2: enable error queues optionally") Cc: stable@dpdk.org Signed-off-by: Jun Yang <jun.yang@nxp.com> --- drivers/net/dpaa2/dpaa2_rxtx.c | 38 ++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c index 6cb91e67d4..7caccfa469 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -629,9 +629,11 @@ dump_err_pkts(struct dpaa2_queue *dpaa2_q) const struct qbman_fd *fd; struct qbman_pull_desc pulldesc; struct rte_eth_dev_data *eth_data = dpaa2_q->eth_data; - uint32_t lcore_id = rte_lcore_id(); + uint32_t lcore_id = rte_lcore_id(), i = 0; void *v_addr, *hw_annot_addr; struct dpaa2_fas *fas; + struct rte_mbuf *mbuf; + char title[32]; if (unlikely(!DPAA2_PER_LCORE_DPIO)) { ret = dpaa2_affine_qbman_swp(); @@ -687,13 +689,37 @@ dump_err_pkts(struct dpaa2_queue *dpaa2_q) hw_annot_addr = (void *)((size_t)v_addr + DPAA2_FD_PTA_SIZE); fas = hw_annot_addr; - DPAA2_PMD_ERR("[%d] error packet on port[%d]:" - " fd_off: %d, fd_err: %x, fas_status: %x", - rte_lcore_id(), eth_data->port_id, + if (DPAA2_FD_GET_FORMAT(fd) == qbman_fd_sg) + mbuf = eth_sg_fd_to_mbuf(fd, eth_data->port_id); + else + mbuf = eth_fd_to_mbuf(fd, eth_data->port_id); + + if (!dpaa2_print_parser_result) { + /** Don't print parse result twice.*/ + dpaa2_print_parse_result(hw_annot_addr); + } + + DPAA2_PMD_ERR("Err pkt on port[%d]:", eth_data->port_id); + DPAA2_PMD_ERR("FD offset: %d, FD err: %x, FAS status: %x", DPAA2_GET_FD_OFFSET(fd), DPAA2_GET_FD_ERR(fd), fas->status); - rte_hexdump(stderr, "Error packet", v_addr, - DPAA2_GET_FD_OFFSET(fd) + DPAA2_GET_FD_LEN(fd)); + + if (mbuf) + __rte_mbuf_sanity_check(mbuf, 1); + if (mbuf->nb_segs > 1) { + while (mbuf) { + sprintf(title, "Payload seg[%d]", i); + rte_hexdump(stderr, title, + (char *)mbuf->buf_addr + mbuf->data_off, + mbuf->data_len); + mbuf = mbuf->next; + i++; + } + } else { + rte_hexdump(stderr, "Payload", + (char *)mbuf->buf_addr + mbuf->data_off, + mbuf->data_len); + } rte_pktmbuf_free(mbuf); dq_storage++; -- 2.43.0 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 06/15] net/dpaa2: fix flow rule's resizing issue [not found] <20251014055605.1303410-1-prashant.gupta_3@nxp.com> ` (4 preceding siblings ...) 2025-10-14 5:55 ` [PATCH 05/15] net/dpaa2: fix error frame dump issue Prashant Gupta @ 2025-10-14 5:55 ` Prashant Gupta 5 siblings, 0 replies; 8+ messages in thread From: Prashant Gupta @ 2025-10-14 5:55 UTC (permalink / raw) To: Hemant.agrawal, g.singh; +Cc: stable, Jun Yang From: Jun Yang <jun.yang@nxp.com> Appending new extract need resize the flow's rule. The rule's size should start from new extract's position plus it's size unless the position is less than rule's original size. Fixes: 56c1817d532e ("net/dpaa2: refactor flow engine") Cc: stable@dpdk.org Signed-off-by: Jun Yang <jun.yang@nxp.com> --- drivers/net/dpaa2/dpaa2_flow.c | 123 ++++++++++++++++++++++++++------- 1 file changed, 97 insertions(+), 26 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_flow.c b/drivers/net/dpaa2/dpaa2_flow.c index 299c50dcdf..2e44bff766 100644 --- a/drivers/net/dpaa2/dpaa2_flow.c +++ b/drivers/net/dpaa2/dpaa2_flow.c @@ -630,42 +630,42 @@ dpaa2_flow_rule_insert_hole(struct dpaa2_dev_flow *flow, int offset, int size, enum dpaa2_flow_dist_type dist_type) { - int end; - if (dist_type & DPAA2_FLOW_QOS_TYPE) { - end = flow->qos_rule_size; - if (end > offset) { + if (offset < flow->qos_rule_size) { memmove(flow->qos_key_addr + offset + size, flow->qos_key_addr + offset, - end - offset); + flow->qos_rule_size - offset); memset(flow->qos_key_addr + offset, 0, size); memmove(flow->qos_mask_addr + offset + size, flow->qos_mask_addr + offset, - end - offset); + flow->qos_rule_size - offset); memset(flow->qos_mask_addr + offset, 0, size); + flow->qos_rule_size += size; + } else { + flow->qos_rule_size = offset + size; } - flow->qos_rule_size += size; } if (dist_type & DPAA2_FLOW_FS_TYPE) { - end = flow->fs_rule_size; - if (end > offset) { + if (offset < flow->fs_rule_size) { memmove(flow->fs_key_addr + offset + size, flow->fs_key_addr + offset, - end - offset); + flow->fs_rule_size - offset); memset(flow->fs_key_addr + offset, 0, size); memmove(flow->fs_mask_addr + offset + size, flow->fs_mask_addr + offset, - end - offset); + flow->fs_rule_size - offset); memset(flow->fs_mask_addr + offset, 0, size); + flow->fs_rule_size += size; + } else { + flow->fs_rule_size = offset + size; } - flow->fs_rule_size += size; } return 0; @@ -1485,8 +1485,9 @@ dpaa2_flow_faf_add_rule(struct dpaa2_dev_priv *priv, mask_addr = flow->qos_mask_addr + offset; if (!(*key_addr) && - key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->qos_rule_size++; + key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT && + offset >= flow->qos_rule_size) + flow->qos_rule_size = offset + sizeof(uint8_t); *key_addr |= (1 << faf_bit_in_byte); *mask_addr |= (1 << faf_bit_in_byte); @@ -1507,8 +1508,9 @@ dpaa2_flow_faf_add_rule(struct dpaa2_dev_priv *priv, mask_addr = flow->fs_mask_addr + offset; if (!(*key_addr) && - key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->fs_rule_size++; + key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT && + offset >= flow->fs_rule_size) + flow->fs_rule_size = offset + sizeof(uint8_t); *key_addr |= (1 << faf_bit_in_byte); *mask_addr |= (1 << faf_bit_in_byte); @@ -1526,6 +1528,7 @@ dpaa2_flow_pr_rule_data_set(struct dpaa2_dev_flow *flow, { int offset; uint32_t pr_field = pr_offset << 16 | pr_size; + char offset_info[64], size_info[64], rule_size_info[64]; offset = dpaa2_flow_extract_key_offset(key_profile, DPAA2_PR_KEY, NET_PROT_NONE, pr_field); @@ -1534,19 +1537,43 @@ dpaa2_flow_pr_rule_data_set(struct dpaa2_dev_flow *flow, pr_offset, pr_size); return -EINVAL; } + sprintf(offset_info, "offset(%d)", offset); + sprintf(size_info, "size(%d)", pr_size); if (dist_type & DPAA2_FLOW_QOS_TYPE) { + sprintf(rule_size_info, "qos rule size(%d)", + flow->qos_rule_size); memcpy((flow->qos_key_addr + offset), key, pr_size); memcpy((flow->qos_mask_addr + offset), mask, pr_size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->qos_rule_size = offset + pr_size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->qos_rule_size) { + flow->qos_rule_size = offset + pr_size; + } else if ((offset + pr_size) > flow->qos_rule_size) { + DPAA2_PMD_ERR("%s < %s, but %s + %s > %s", + offset_info, rule_size_info, + offset_info, size_info, + rule_size_info); + return -EINVAL; + } + } } if (dist_type & DPAA2_FLOW_FS_TYPE) { + sprintf(rule_size_info, "fs rule size(%d)", + flow->fs_rule_size); memcpy((flow->fs_key_addr + offset), key, pr_size); memcpy((flow->fs_mask_addr + offset), mask, pr_size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->fs_rule_size = offset + pr_size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->fs_rule_size) { + flow->fs_rule_size = offset + pr_size; + } else if ((offset + pr_size) > flow->fs_rule_size) { + DPAA2_PMD_ERR("%s < %s, but %s + %s > %s", + offset_info, rule_size_info, + offset_info, size_info, + rule_size_info); + return -EINVAL; + } + } } return 0; @@ -1560,6 +1587,7 @@ dpaa2_flow_hdr_rule_data_set(struct dpaa2_dev_flow *flow, enum dpaa2_flow_dist_type dist_type) { int offset; + char offset_info[64], size_info[64], rule_size_info[64]; if (dpaa2_flow_ip_address_extract(prot, field)) { DPAA2_PMD_ERR("%s only for none IP address extract", @@ -1574,19 +1602,41 @@ dpaa2_flow_hdr_rule_data_set(struct dpaa2_dev_flow *flow, prot, field); return -EINVAL; } + sprintf(offset_info, "offset(%d)", offset); + sprintf(size_info, "size(%d)", size); if (dist_type & DPAA2_FLOW_QOS_TYPE) { + sprintf(rule_size_info, "qos rule size(%d)", + flow->qos_rule_size); memcpy((flow->qos_key_addr + offset), key, size); memcpy((flow->qos_mask_addr + offset), mask, size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->qos_rule_size = offset + size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->qos_rule_size) { + flow->qos_rule_size = offset + size; + } else if ((offset + size) > flow->qos_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } + } } if (dist_type & DPAA2_FLOW_FS_TYPE) { + sprintf(rule_size_info, "fs rule size(%d)", + flow->fs_rule_size); memcpy((flow->fs_key_addr + offset), key, size); memcpy((flow->fs_mask_addr + offset), mask, size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->fs_rule_size = offset + size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->fs_rule_size) { + flow->fs_rule_size = offset + size; + } else if ((offset + size) > flow->fs_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } + } } return 0; @@ -1602,6 +1652,7 @@ dpaa2_flow_raw_rule_data_set(struct dpaa2_dev_flow *flow, int extract_size = size > DPAA2_FLOW_MAX_KEY_SIZE ? DPAA2_FLOW_MAX_KEY_SIZE : size; int offset, field; + char offset_info[64], size_info[64], rule_size_info[64]; field = extract_offset << DPAA2_FLOW_RAW_OFFSET_FIELD_SHIFT; field |= extract_size; @@ -1612,17 +1663,37 @@ dpaa2_flow_raw_rule_data_set(struct dpaa2_dev_flow *flow, extract_offset, size); return -EINVAL; } + sprintf(offset_info, "offset(%d)", offset); + sprintf(size_info, "size(%d)", size); if (dist_type & DPAA2_FLOW_QOS_TYPE) { + sprintf(rule_size_info, "qos rule size(%d)", + flow->qos_rule_size); memcpy((flow->qos_key_addr + offset), key, size); memcpy((flow->qos_mask_addr + offset), mask, size); - flow->qos_rule_size = offset + size; + if (offset >= flow->qos_rule_size) { + flow->qos_rule_size = offset + size; + } else if ((offset + size) > flow->qos_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } } if (dist_type & DPAA2_FLOW_FS_TYPE) { + sprintf(rule_size_info, "fs rule size(%d)", + flow->fs_rule_size); memcpy((flow->fs_key_addr + offset), key, size); memcpy((flow->fs_mask_addr + offset), mask, size); - flow->fs_rule_size = offset + size; + if (offset >= flow->fs_rule_size) { + flow->fs_rule_size = offset + size; + } else if ((offset + size) > flow->fs_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } } return 0; -- 2.43.0 ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <20251014060045.1304694-1-prashant.gupta_3@nxp.com>]
* [PATCH 06/15] net/dpaa2: fix flow rule's resizing issue [not found] <20251014060045.1304694-1-prashant.gupta_3@nxp.com> @ 2025-10-14 6:00 ` Prashant Gupta 0 siblings, 0 replies; 8+ messages in thread From: Prashant Gupta @ 2025-10-14 6:00 UTC (permalink / raw) To: dev, stephen, david.marchand; +Cc: stable, Jun Yang From: Jun Yang <jun.yang@nxp.com> Appending new extract need resize the flow's rule. The rule's size should start from new extract's position plus it's size unless the position is less than rule's original size. Fixes: 56c1817d532e ("net/dpaa2: refactor flow engine") Cc: stable@dpdk.org Signed-off-by: Jun Yang <jun.yang@nxp.com> --- drivers/net/dpaa2/dpaa2_flow.c | 123 ++++++++++++++++++++++++++------- 1 file changed, 97 insertions(+), 26 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_flow.c b/drivers/net/dpaa2/dpaa2_flow.c index 299c50dcdf..2e44bff766 100644 --- a/drivers/net/dpaa2/dpaa2_flow.c +++ b/drivers/net/dpaa2/dpaa2_flow.c @@ -630,42 +630,42 @@ dpaa2_flow_rule_insert_hole(struct dpaa2_dev_flow *flow, int offset, int size, enum dpaa2_flow_dist_type dist_type) { - int end; - if (dist_type & DPAA2_FLOW_QOS_TYPE) { - end = flow->qos_rule_size; - if (end > offset) { + if (offset < flow->qos_rule_size) { memmove(flow->qos_key_addr + offset + size, flow->qos_key_addr + offset, - end - offset); + flow->qos_rule_size - offset); memset(flow->qos_key_addr + offset, 0, size); memmove(flow->qos_mask_addr + offset + size, flow->qos_mask_addr + offset, - end - offset); + flow->qos_rule_size - offset); memset(flow->qos_mask_addr + offset, 0, size); + flow->qos_rule_size += size; + } else { + flow->qos_rule_size = offset + size; } - flow->qos_rule_size += size; } if (dist_type & DPAA2_FLOW_FS_TYPE) { - end = flow->fs_rule_size; - if (end > offset) { + if (offset < flow->fs_rule_size) { memmove(flow->fs_key_addr + offset + size, flow->fs_key_addr + offset, - end - offset); + flow->fs_rule_size - offset); memset(flow->fs_key_addr + offset, 0, size); memmove(flow->fs_mask_addr + offset + size, flow->fs_mask_addr + offset, - end - offset); + flow->fs_rule_size - offset); memset(flow->fs_mask_addr + offset, 0, size); + flow->fs_rule_size += size; + } else { + flow->fs_rule_size = offset + size; } - flow->fs_rule_size += size; } return 0; @@ -1485,8 +1485,9 @@ dpaa2_flow_faf_add_rule(struct dpaa2_dev_priv *priv, mask_addr = flow->qos_mask_addr + offset; if (!(*key_addr) && - key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->qos_rule_size++; + key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT && + offset >= flow->qos_rule_size) + flow->qos_rule_size = offset + sizeof(uint8_t); *key_addr |= (1 << faf_bit_in_byte); *mask_addr |= (1 << faf_bit_in_byte); @@ -1507,8 +1508,9 @@ dpaa2_flow_faf_add_rule(struct dpaa2_dev_priv *priv, mask_addr = flow->fs_mask_addr + offset; if (!(*key_addr) && - key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->fs_rule_size++; + key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT && + offset >= flow->fs_rule_size) + flow->fs_rule_size = offset + sizeof(uint8_t); *key_addr |= (1 << faf_bit_in_byte); *mask_addr |= (1 << faf_bit_in_byte); @@ -1526,6 +1528,7 @@ dpaa2_flow_pr_rule_data_set(struct dpaa2_dev_flow *flow, { int offset; uint32_t pr_field = pr_offset << 16 | pr_size; + char offset_info[64], size_info[64], rule_size_info[64]; offset = dpaa2_flow_extract_key_offset(key_profile, DPAA2_PR_KEY, NET_PROT_NONE, pr_field); @@ -1534,19 +1537,43 @@ dpaa2_flow_pr_rule_data_set(struct dpaa2_dev_flow *flow, pr_offset, pr_size); return -EINVAL; } + sprintf(offset_info, "offset(%d)", offset); + sprintf(size_info, "size(%d)", pr_size); if (dist_type & DPAA2_FLOW_QOS_TYPE) { + sprintf(rule_size_info, "qos rule size(%d)", + flow->qos_rule_size); memcpy((flow->qos_key_addr + offset), key, pr_size); memcpy((flow->qos_mask_addr + offset), mask, pr_size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->qos_rule_size = offset + pr_size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->qos_rule_size) { + flow->qos_rule_size = offset + pr_size; + } else if ((offset + pr_size) > flow->qos_rule_size) { + DPAA2_PMD_ERR("%s < %s, but %s + %s > %s", + offset_info, rule_size_info, + offset_info, size_info, + rule_size_info); + return -EINVAL; + } + } } if (dist_type & DPAA2_FLOW_FS_TYPE) { + sprintf(rule_size_info, "fs rule size(%d)", + flow->fs_rule_size); memcpy((flow->fs_key_addr + offset), key, pr_size); memcpy((flow->fs_mask_addr + offset), mask, pr_size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->fs_rule_size = offset + pr_size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->fs_rule_size) { + flow->fs_rule_size = offset + pr_size; + } else if ((offset + pr_size) > flow->fs_rule_size) { + DPAA2_PMD_ERR("%s < %s, but %s + %s > %s", + offset_info, rule_size_info, + offset_info, size_info, + rule_size_info); + return -EINVAL; + } + } } return 0; @@ -1560,6 +1587,7 @@ dpaa2_flow_hdr_rule_data_set(struct dpaa2_dev_flow *flow, enum dpaa2_flow_dist_type dist_type) { int offset; + char offset_info[64], size_info[64], rule_size_info[64]; if (dpaa2_flow_ip_address_extract(prot, field)) { DPAA2_PMD_ERR("%s only for none IP address extract", @@ -1574,19 +1602,41 @@ dpaa2_flow_hdr_rule_data_set(struct dpaa2_dev_flow *flow, prot, field); return -EINVAL; } + sprintf(offset_info, "offset(%d)", offset); + sprintf(size_info, "size(%d)", size); if (dist_type & DPAA2_FLOW_QOS_TYPE) { + sprintf(rule_size_info, "qos rule size(%d)", + flow->qos_rule_size); memcpy((flow->qos_key_addr + offset), key, size); memcpy((flow->qos_mask_addr + offset), mask, size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->qos_rule_size = offset + size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->qos_rule_size) { + flow->qos_rule_size = offset + size; + } else if ((offset + size) > flow->qos_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } + } } if (dist_type & DPAA2_FLOW_FS_TYPE) { + sprintf(rule_size_info, "fs rule size(%d)", + flow->fs_rule_size); memcpy((flow->fs_key_addr + offset), key, size); memcpy((flow->fs_mask_addr + offset), mask, size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->fs_rule_size = offset + size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->fs_rule_size) { + flow->fs_rule_size = offset + size; + } else if ((offset + size) > flow->fs_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } + } } return 0; @@ -1602,6 +1652,7 @@ dpaa2_flow_raw_rule_data_set(struct dpaa2_dev_flow *flow, int extract_size = size > DPAA2_FLOW_MAX_KEY_SIZE ? DPAA2_FLOW_MAX_KEY_SIZE : size; int offset, field; + char offset_info[64], size_info[64], rule_size_info[64]; field = extract_offset << DPAA2_FLOW_RAW_OFFSET_FIELD_SHIFT; field |= extract_size; @@ -1612,17 +1663,37 @@ dpaa2_flow_raw_rule_data_set(struct dpaa2_dev_flow *flow, extract_offset, size); return -EINVAL; } + sprintf(offset_info, "offset(%d)", offset); + sprintf(size_info, "size(%d)", size); if (dist_type & DPAA2_FLOW_QOS_TYPE) { + sprintf(rule_size_info, "qos rule size(%d)", + flow->qos_rule_size); memcpy((flow->qos_key_addr + offset), key, size); memcpy((flow->qos_mask_addr + offset), mask, size); - flow->qos_rule_size = offset + size; + if (offset >= flow->qos_rule_size) { + flow->qos_rule_size = offset + size; + } else if ((offset + size) > flow->qos_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } } if (dist_type & DPAA2_FLOW_FS_TYPE) { + sprintf(rule_size_info, "fs rule size(%d)", + flow->fs_rule_size); memcpy((flow->fs_key_addr + offset), key, size); memcpy((flow->fs_mask_addr + offset), mask, size); - flow->fs_rule_size = offset + size; + if (offset >= flow->fs_rule_size) { + flow->fs_rule_size = offset + size; + } else if ((offset + size) > flow->fs_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } } return 0; -- 2.43.0 ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <20251014064035.1312896-1-prashant.gupta_3@nxp.com>]
* [PATCH 06/15] net/dpaa2: fix flow rule's resizing issue [not found] <20251014064035.1312896-1-prashant.gupta_3@nxp.com> @ 2025-10-14 6:40 ` Prashant Gupta 0 siblings, 0 replies; 8+ messages in thread From: Prashant Gupta @ 2025-10-14 6:40 UTC (permalink / raw) To: dev, stephen, david.marchand; +Cc: stable, Jun Yang From: Jun Yang <jun.yang@nxp.com> Appending new extract need resize the flow's rule. The rule's size should start from new extract's position plus it's size unless the position is less than rule's original size. Fixes: 56c1817d532e ("net/dpaa2: refactor flow engine") Cc: stable@dpdk.org Signed-off-by: Jun Yang <jun.yang@nxp.com> --- drivers/net/dpaa2/dpaa2_flow.c | 123 ++++++++++++++++++++++++++------- 1 file changed, 97 insertions(+), 26 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_flow.c b/drivers/net/dpaa2/dpaa2_flow.c index 299c50dcdf..2e44bff766 100644 --- a/drivers/net/dpaa2/dpaa2_flow.c +++ b/drivers/net/dpaa2/dpaa2_flow.c @@ -630,42 +630,42 @@ dpaa2_flow_rule_insert_hole(struct dpaa2_dev_flow *flow, int offset, int size, enum dpaa2_flow_dist_type dist_type) { - int end; - if (dist_type & DPAA2_FLOW_QOS_TYPE) { - end = flow->qos_rule_size; - if (end > offset) { + if (offset < flow->qos_rule_size) { memmove(flow->qos_key_addr + offset + size, flow->qos_key_addr + offset, - end - offset); + flow->qos_rule_size - offset); memset(flow->qos_key_addr + offset, 0, size); memmove(flow->qos_mask_addr + offset + size, flow->qos_mask_addr + offset, - end - offset); + flow->qos_rule_size - offset); memset(flow->qos_mask_addr + offset, 0, size); + flow->qos_rule_size += size; + } else { + flow->qos_rule_size = offset + size; } - flow->qos_rule_size += size; } if (dist_type & DPAA2_FLOW_FS_TYPE) { - end = flow->fs_rule_size; - if (end > offset) { + if (offset < flow->fs_rule_size) { memmove(flow->fs_key_addr + offset + size, flow->fs_key_addr + offset, - end - offset); + flow->fs_rule_size - offset); memset(flow->fs_key_addr + offset, 0, size); memmove(flow->fs_mask_addr + offset + size, flow->fs_mask_addr + offset, - end - offset); + flow->fs_rule_size - offset); memset(flow->fs_mask_addr + offset, 0, size); + flow->fs_rule_size += size; + } else { + flow->fs_rule_size = offset + size; } - flow->fs_rule_size += size; } return 0; @@ -1485,8 +1485,9 @@ dpaa2_flow_faf_add_rule(struct dpaa2_dev_priv *priv, mask_addr = flow->qos_mask_addr + offset; if (!(*key_addr) && - key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->qos_rule_size++; + key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT && + offset >= flow->qos_rule_size) + flow->qos_rule_size = offset + sizeof(uint8_t); *key_addr |= (1 << faf_bit_in_byte); *mask_addr |= (1 << faf_bit_in_byte); @@ -1507,8 +1508,9 @@ dpaa2_flow_faf_add_rule(struct dpaa2_dev_priv *priv, mask_addr = flow->fs_mask_addr + offset; if (!(*key_addr) && - key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->fs_rule_size++; + key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT && + offset >= flow->fs_rule_size) + flow->fs_rule_size = offset + sizeof(uint8_t); *key_addr |= (1 << faf_bit_in_byte); *mask_addr |= (1 << faf_bit_in_byte); @@ -1526,6 +1528,7 @@ dpaa2_flow_pr_rule_data_set(struct dpaa2_dev_flow *flow, { int offset; uint32_t pr_field = pr_offset << 16 | pr_size; + char offset_info[64], size_info[64], rule_size_info[64]; offset = dpaa2_flow_extract_key_offset(key_profile, DPAA2_PR_KEY, NET_PROT_NONE, pr_field); @@ -1534,19 +1537,43 @@ dpaa2_flow_pr_rule_data_set(struct dpaa2_dev_flow *flow, pr_offset, pr_size); return -EINVAL; } + sprintf(offset_info, "offset(%d)", offset); + sprintf(size_info, "size(%d)", pr_size); if (dist_type & DPAA2_FLOW_QOS_TYPE) { + sprintf(rule_size_info, "qos rule size(%d)", + flow->qos_rule_size); memcpy((flow->qos_key_addr + offset), key, pr_size); memcpy((flow->qos_mask_addr + offset), mask, pr_size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->qos_rule_size = offset + pr_size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->qos_rule_size) { + flow->qos_rule_size = offset + pr_size; + } else if ((offset + pr_size) > flow->qos_rule_size) { + DPAA2_PMD_ERR("%s < %s, but %s + %s > %s", + offset_info, rule_size_info, + offset_info, size_info, + rule_size_info); + return -EINVAL; + } + } } if (dist_type & DPAA2_FLOW_FS_TYPE) { + sprintf(rule_size_info, "fs rule size(%d)", + flow->fs_rule_size); memcpy((flow->fs_key_addr + offset), key, pr_size); memcpy((flow->fs_mask_addr + offset), mask, pr_size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->fs_rule_size = offset + pr_size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->fs_rule_size) { + flow->fs_rule_size = offset + pr_size; + } else if ((offset + pr_size) > flow->fs_rule_size) { + DPAA2_PMD_ERR("%s < %s, but %s + %s > %s", + offset_info, rule_size_info, + offset_info, size_info, + rule_size_info); + return -EINVAL; + } + } } return 0; @@ -1560,6 +1587,7 @@ dpaa2_flow_hdr_rule_data_set(struct dpaa2_dev_flow *flow, enum dpaa2_flow_dist_type dist_type) { int offset; + char offset_info[64], size_info[64], rule_size_info[64]; if (dpaa2_flow_ip_address_extract(prot, field)) { DPAA2_PMD_ERR("%s only for none IP address extract", @@ -1574,19 +1602,41 @@ dpaa2_flow_hdr_rule_data_set(struct dpaa2_dev_flow *flow, prot, field); return -EINVAL; } + sprintf(offset_info, "offset(%d)", offset); + sprintf(size_info, "size(%d)", size); if (dist_type & DPAA2_FLOW_QOS_TYPE) { + sprintf(rule_size_info, "qos rule size(%d)", + flow->qos_rule_size); memcpy((flow->qos_key_addr + offset), key, size); memcpy((flow->qos_mask_addr + offset), mask, size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->qos_rule_size = offset + size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->qos_rule_size) { + flow->qos_rule_size = offset + size; + } else if ((offset + size) > flow->qos_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } + } } if (dist_type & DPAA2_FLOW_FS_TYPE) { + sprintf(rule_size_info, "fs rule size(%d)", + flow->fs_rule_size); memcpy((flow->fs_key_addr + offset), key, size); memcpy((flow->fs_mask_addr + offset), mask, size); - if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) - flow->fs_rule_size = offset + size; + if (key_profile->ip_addr_type == IP_NONE_ADDR_EXTRACT) { + if (offset >= flow->fs_rule_size) { + flow->fs_rule_size = offset + size; + } else if ((offset + size) > flow->fs_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } + } } return 0; @@ -1602,6 +1652,7 @@ dpaa2_flow_raw_rule_data_set(struct dpaa2_dev_flow *flow, int extract_size = size > DPAA2_FLOW_MAX_KEY_SIZE ? DPAA2_FLOW_MAX_KEY_SIZE : size; int offset, field; + char offset_info[64], size_info[64], rule_size_info[64]; field = extract_offset << DPAA2_FLOW_RAW_OFFSET_FIELD_SHIFT; field |= extract_size; @@ -1612,17 +1663,37 @@ dpaa2_flow_raw_rule_data_set(struct dpaa2_dev_flow *flow, extract_offset, size); return -EINVAL; } + sprintf(offset_info, "offset(%d)", offset); + sprintf(size_info, "size(%d)", size); if (dist_type & DPAA2_FLOW_QOS_TYPE) { + sprintf(rule_size_info, "qos rule size(%d)", + flow->qos_rule_size); memcpy((flow->qos_key_addr + offset), key, size); memcpy((flow->qos_mask_addr + offset), mask, size); - flow->qos_rule_size = offset + size; + if (offset >= flow->qos_rule_size) { + flow->qos_rule_size = offset + size; + } else if ((offset + size) > flow->qos_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } } if (dist_type & DPAA2_FLOW_FS_TYPE) { + sprintf(rule_size_info, "fs rule size(%d)", + flow->fs_rule_size); memcpy((flow->fs_key_addr + offset), key, size); memcpy((flow->fs_mask_addr + offset), mask, size); - flow->fs_rule_size = offset + size; + if (offset >= flow->fs_rule_size) { + flow->fs_rule_size = offset + size; + } else if ((offset + size) > flow->fs_rule_size) { + DPAA2_PMD_ERR("%s: %s < %s, but %s + %s > %s", + __func__, offset_info, rule_size_info, + offset_info, size_info, rule_size_info); + return -EINVAL; + } } return 0; -- 2.43.0 ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-10-16 19:23 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20251014055605.1303410-1-prashant.gupta_3@nxp.com> 2025-10-14 5:55 ` [PATCH 01/15] net/dpaa2: fix uninitialized variable issue Prashant Gupta 2025-10-14 5:55 ` [PATCH 02/15] net/dpaa2: fix to free buffers from error queue Prashant Gupta 2025-10-14 5:55 ` [PATCH 03/15] net/dpaa2: fix L3/L4 csum results in packet parse Prashant Gupta 2025-10-14 5:55 ` [PATCH 04/15] net/dpaa2: fix to recv packets with additional parse errors Prashant Gupta 2025-10-14 5:55 ` [PATCH 05/15] net/dpaa2: fix error frame dump issue Prashant Gupta 2025-10-14 5:55 ` [PATCH 06/15] net/dpaa2: fix flow rule's resizing issue Prashant Gupta [not found] <20251014060045.1304694-1-prashant.gupta_3@nxp.com> 2025-10-14 6:00 ` Prashant Gupta [not found] <20251014064035.1312896-1-prashant.gupta_3@nxp.com> 2025-10-14 6:40 ` Prashant Gupta
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).