From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D283C47136 for ; Tue, 30 Dec 2025 08:23:20 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CBED340267; Tue, 30 Dec 2025 08:23:20 +0100 (CET) Received: from mx0a-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 5301340267 for ; Tue, 30 Dec 2025 08:23:19 +0100 (CET) Received: from pps.filterd (m0431384.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BU3iALi448324; Mon, 29 Dec 2025 23:23:18 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=pfpt0220; bh=+jvbSeFxQlumhee/81NjmBP JdkSAVjyv1t3juI55IFs=; b=FWjBbFn+tNzSXhXPigUxQkMxJF0G2QUnm1S/Uur plopx1PVl6gs30rPFtKXTcLc7DGrSY2oh203QEvHeEI3lHSazwTtLrHc33P23WW/ IqF7MJvlElUqwahA7nSILshNllX1Ozrk0/bppGUVak52wKfFgmOWIXQHC49pZ4aG SJilraMKsdCJSny17YmFG/CuBrCln73WdyFUpKCjGf41ybXAQvOtn9OvBJrheuf4 5tkwK0wiSAaYXk1A4xrEd6QJY7W6HA6BMLkYhgykrP3QBkS6btlJmO7/DoN6vuY7 +BfeBrG1wC0V4Gu+tEj6Mj/Uqf0ZM4IZojtgepv6R1powqw== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 4bb4kbub2m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 29 Dec 2025 23:23:18 -0800 (PST) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Mon, 29 Dec 2025 23:23:32 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.25 via Frontend Transport; Mon, 29 Dec 2025 23:23:32 -0800 Received: from cavium-VAMSI-BM.. (unknown [10.28.36.156]) by maili.marvell.com (Postfix) with ESMTP id 4D3685B6964; Mon, 29 Dec 2025 23:23:16 -0800 (PST) From: Vamsi Krishna To: CC: , Vamsi Attunuru Subject: [PATCH 23.11] net/octeon_ep: fix mbuf data offset update Date: Tue, 30 Dec 2025 12:53:08 +0530 Message-ID: <20251230072308.2946706-1-vattunuru@marvell.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjMwMDA2NSBTYWx0ZWRfX76ScrUbHvRO2 gcpnTxrusM0A5jz2I2PRNjEk88Z/+LLtupbQNRatChvm+kyB+ttV5jv12FQOiHH9EuOeEoJnflF aY2rvQuEhpZ4v24cDMqh+RCy4fpChNLpx70/PGEQ9Pc2Z2Gh7j/vHdxcLhBb2D51sqKg3rIz9Uc Vh32kAabEdhKe0XAuO4tBa7Nad5ouYlY/6lvV3DlGXbmfgd6F1aFb8G2uAYkTXH63P9qUO3ZvNx evgJGJqR/0MpNUUqDnsr7i8Nwcj+3PBIyD8zXshTdgYQPvvBOV+CfSZot1jGbjKqtiYaKI9/b9k ToduPkmLDxbl+HfmaIel52mFuqqBW2wi46oVkZyNV9/d4iBX/FiHYkHMxzOVucF1OhvYL7pXLMb UyZgW4fqeKRiotRZUXnbKxKLtgndqoBH4D6zMzjnQ3/QgEFUC5vebe1Jym0qwPR4rwa3+ITiz+6 ukjIGM6ECNpXHZvXXpA== X-Authority-Analysis: v=2.4 cv=NtfcssdJ c=1 sm=1 tr=0 ts=69537de6 cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=M5GUcnROAAAA:8 a=gH6uvepHF7cPfNAmf-IA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-ORIG-GUID: mue9aQxjShxxtaWIIh232B4fyOxVbPpT X-Proofpoint-GUID: mue9aQxjShxxtaWIIh232B4fyOxVbPpT X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-29_07,2025-12-29_01,2025-10-01_01 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org From: Vamsi Attunuru [ upstream commit 74348d7ad2503960611e979677acad4b4641e7dd ] Buffer refill routine uses mempool API instead of pktmbuf alloc to avoid mbuf reset. Patch uses rearm to update the mbuf fields. Also it removes redundant refill count update. Fixes: 35dee56cee00 ("net/octeon_ep: add new fastpath routines") Signed-off-by: Vamsi Attunuru --- drivers/net/octeon_ep/cnxk_ep_rx.c | 9 ++++----- drivers/net/octeon_ep/otx_ep_common.h | 3 +++ drivers/net/octeon_ep/otx_ep_rxtx.c | 27 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/drivers/net/octeon_ep/cnxk_ep_rx.c b/drivers/net/octeon_ep/cnxk_ep_rx.c index 41b369bd6b..10ab0ceaaa 100644 --- a/drivers/net/octeon_ep/cnxk_ep_rx.c +++ b/drivers/net/octeon_ep/cnxk_ep_rx.c @@ -6,6 +6,8 @@ #include "otx2_ep_vf.h" #include "otx_ep_rxtx.h" +#define cnxk_pktmbuf_mtod(m, t) ((t)(void *)((char *)(m)->buf_addr + RTE_PKTMBUF_HEADROOM)) + static inline int cnxk_ep_rx_refill_mbuf(struct otx_ep_droq *droq, uint32_t count) { @@ -163,7 +165,6 @@ cnxk_ep_process_pkts_scalar_mseg(struct rte_mbuf **rx_pkts, struct otx_ep_droq * { struct rte_mbuf **recv_buf_list = droq->recv_buf_list; uint32_t total_pkt_len, bytes_rsvd = 0; - uint16_t port_id = droq->otx_ep_dev->port_id; uint16_t nb_desc = droq->nb_desc; uint16_t pkts; @@ -175,7 +176,7 @@ cnxk_ep_process_pkts_scalar_mseg(struct rte_mbuf **rx_pkts, struct otx_ep_droq * uint32_t pkt_len = 0; mbuf = recv_buf_list[droq->read_idx]; - info = rte_pktmbuf_mtod(mbuf, struct otx_ep_droq_info *); + info = cnxk_pktmbuf_mtod(mbuf, struct otx_ep_droq_info *); total_pkt_len = rte_bswap16(info->length >> 48) + OTX_EP_INFO_SIZE; @@ -190,7 +191,7 @@ cnxk_ep_process_pkts_scalar_mseg(struct rte_mbuf **rx_pkts, struct otx_ep_droq * if (!pkt_len) { /* Note the first seg */ first_buf = mbuf; - mbuf->data_off += OTX_EP_INFO_SIZE; + *(uint64_t *)&mbuf->rearm_data = droq->rearm_data; mbuf->pkt_len = cpy_len - OTX_EP_INFO_SIZE; mbuf->data_len = cpy_len - OTX_EP_INFO_SIZE; } else { @@ -210,12 +211,10 @@ cnxk_ep_process_pkts_scalar_mseg(struct rte_mbuf **rx_pkts, struct otx_ep_droq * droq->refill_count++; } mbuf = first_buf; - mbuf->port = port_id; rx_pkts[pkts] = mbuf; bytes_rsvd += pkt_len; } - droq->refill_count += new_pkts; droq->pkts_pending -= pkts; /* Stats */ droq->stats.pkts_received += pkts; diff --git a/drivers/net/octeon_ep/otx_ep_common.h b/drivers/net/octeon_ep/otx_ep_common.h index ccd4483058..2b93cabc13 100644 --- a/drivers/net/octeon_ep/otx_ep_common.h +++ b/drivers/net/octeon_ep/otx_ep_common.h @@ -365,6 +365,9 @@ struct otx_ep_droq { /* receive buffer list contains mbuf ptr list */ struct rte_mbuf **recv_buf_list; + /* Packet re-arm data. */ + uint64_t rearm_data; + /* Packets pending to be processed */ uint64_t pkts_pending; diff --git a/drivers/net/octeon_ep/otx_ep_rxtx.c b/drivers/net/octeon_ep/otx_ep_rxtx.c index 65a1f304e8..429579ba16 100644 --- a/drivers/net/octeon_ep/otx_ep_rxtx.c +++ b/drivers/net/octeon_ep/otx_ep_rxtx.c @@ -284,6 +284,32 @@ otx_ep_droq_setup_ring_buffers(struct otx_ep_droq *droq) return 0; } +static inline uint64_t +otx_ep_set_rearm_data(struct otx_ep_device *otx_ep) +{ + uint16_t port_id = otx_ep->port_id; + struct rte_mbuf mb_def; + uint64_t *tmp; + + RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, data_off) % 8 != 0); + RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, refcnt) - offsetof(struct rte_mbuf, data_off) != + 2); + RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, nb_segs) - offsetof(struct rte_mbuf, data_off) != + 4); + RTE_BUILD_BUG_ON(offsetof(struct rte_mbuf, port) - offsetof(struct rte_mbuf, data_off) != + 6); + mb_def.nb_segs = 1; + mb_def.data_off = RTE_PKTMBUF_HEADROOM + OTX_EP_INFO_SIZE; + mb_def.port = port_id; + rte_mbuf_refcnt_set(&mb_def, 1); + + /* Prevent compiler reordering: rearm_data covers previous fields */ + rte_compiler_barrier(); + tmp = (uint64_t *)&mb_def.rearm_data; + + return *tmp; +} + /* OQ initialization */ static int otx_ep_init_droq(struct otx_ep_device *otx_ep, uint32_t q_no, @@ -340,6 +366,7 @@ otx_ep_init_droq(struct otx_ep_device *otx_ep, uint32_t q_no, goto init_droq_fail; droq->refill_threshold = c_refill_threshold; + droq->rearm_data = otx_ep_set_rearm_data(otx_ep); /* Set up OQ registers */ ret = otx_ep->fn_list.setup_oq_regs(otx_ep, q_no); -- 2.34.1