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 63EB046623 for ; Fri, 25 Apr 2025 04:08:18 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 58DFE402F1; Fri, 25 Apr 2025 04:08:18 +0200 (CEST) Received: from out28-124.mail.aliyun.com (out28-124.mail.aliyun.com [115.124.28.124]) by mails.dpdk.org (Postfix) with ESMTP id 79C82400D5 for ; Fri, 25 Apr 2025 04:08:16 +0200 (CEST) Received: from localhost.localdomain(mailfrom:kyo.liu@nebula-matrix.com fp:SMTPD_---.cW5c8Jn_1745546890 cluster:ay29) by smtp.aliyun-inc.com; Fri, 25 Apr 2025 10:08:10 +0800 From: Kyo Liu To: kyo.liu@nebula-matrix.com, dimon.zhao@nebula-matrix.com Cc: Long Li , stable@dpdk.org Subject: [PATCH v1 08/10] net/netvsc: use Hyper-V page size for the driver Date: Fri, 25 Apr 2025 02:07:56 +0000 Message-ID: <20250425020758.3794-8-kyo.liu@nebula-matrix.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250425020758.3794-1-kyo.liu@nebula-matrix.com> References: <20250425020758.3794-1-kyo.liu@nebula-matrix.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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: Long Li The driver should always use Hyper-V page size for implementing RNDIS and calculating PFN (Page Frame Number) for communicating with Hyper-V VSP. It should not use system page size as it may be different to the Hyper-V page size. Fixes: 4e9c73e96e ("net/netvsc: add Hyper-V network device") Cc: stable@dpdk.org Signed-off-by: Long Li --- drivers/net/netvsc/hn_rndis.c | 14 +++++++------- drivers/net/netvsc/hn_rxtx.c | 16 ++++++++-------- drivers/net/netvsc/hn_var.h | 4 ---- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/drivers/net/netvsc/hn_rndis.c b/drivers/net/netvsc/hn_rndis.c index 12bea33e37..7c54eebcef 100644 --- a/drivers/net/netvsc/hn_rndis.c +++ b/drivers/net/netvsc/hn_rndis.c @@ -67,7 +67,7 @@ hn_rndis_rid(struct hn_data *hv) static void *hn_rndis_alloc(size_t size) { - return rte_zmalloc("RNDIS", size, rte_mem_page_size()); + return rte_zmalloc("RNDIS", size, HYPERV_PAGE_SIZE); } #ifdef RTE_LIBRTE_NETVSC_DEBUG_DUMP @@ -266,17 +266,17 @@ static int hn_nvs_send_rndis_ctrl(struct hn_data *hv, return -EINVAL; } - if (unlikely(reqlen > rte_mem_page_size())) { + if (unlikely(reqlen > HYPERV_PAGE_SIZE)) { PMD_DRV_LOG(ERR, "RNDIS request %u greater than page size", reqlen); return -EINVAL; } - sg.page = addr / rte_mem_page_size(); - sg.ofs = addr & PAGE_MASK; + sg.page = addr / HYPERV_PAGE_SIZE; + sg.ofs = addr & HYPERV_PAGE_MASK; sg.len = reqlen; - if (sg.ofs + reqlen > rte_mem_page_size()) { + if (sg.ofs + reqlen > HYPERV_PAGE_SIZE) { PMD_DRV_LOG(ERR, "RNDIS request crosses page boundary"); return -EINVAL; } @@ -481,7 +481,7 @@ hn_rndis_query(struct hn_data *hv, uint32_t oid, return -ENOMEM; comp_len = sizeof(*comp) + odlen; - comp = rte_zmalloc("QUERY", comp_len, rte_mem_page_size()); + comp = rte_zmalloc("QUERY", comp_len, HYPERV_PAGE_SIZE); if (!comp) { error = -ENOMEM; goto done; @@ -738,7 +738,7 @@ hn_rndis_set(struct hn_data *hv, uint32_t oid, const void *data, uint32_t dlen) int error; reqlen = sizeof(*req) + dlen; - req = rte_zmalloc("RNDIS_SET", reqlen, rte_mem_page_size()); + req = rte_zmalloc("RNDIS_SET", reqlen, HYPERV_PAGE_SIZE); if (!req) return -ENOMEM; diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c index ffa6937ce2..44faf22da7 100644 --- a/drivers/net/netvsc/hn_rxtx.c +++ b/drivers/net/netvsc/hn_rxtx.c @@ -1432,10 +1432,10 @@ static unsigned int hn_get_slots(const struct rte_mbuf *m) while (m) { unsigned int size = rte_pktmbuf_data_len(m); - unsigned int offs = rte_mbuf_data_iova(m) & PAGE_MASK; + unsigned int offs = rte_mbuf_data_iova(m) & HYPERV_PAGE_MASK; - slots += (offs + size + rte_mem_page_size() - 1) / - rte_mem_page_size(); + slots += (offs + size + HYPERV_PAGE_SIZE - 1) / + HYPERV_PAGE_SIZE; m = m->next; } @@ -1450,13 +1450,13 @@ static unsigned int hn_fill_sg(struct vmbus_gpa *sg, while (m) { rte_iova_t addr = rte_mbuf_data_iova(m); - unsigned int page = addr / rte_mem_page_size(); - unsigned int offset = addr & PAGE_MASK; + unsigned int page = addr / HYPERV_PAGE_SIZE; + unsigned int offset = addr & HYPERV_PAGE_MASK; unsigned int len = rte_pktmbuf_data_len(m); while (len > 0) { unsigned int bytes = RTE_MIN(len, - rte_mem_page_size() - offset); + HYPERV_PAGE_SIZE - offset); sg[segs].page = page; sg[segs].ofs = offset; @@ -1499,8 +1499,8 @@ static int hn_xmit_sg(struct hn_tx_queue *txq, addr = txq->tx_rndis_iova + ((char *)txd->rndis_pkt - (char *)txq->tx_rndis); - sg[0].page = addr / rte_mem_page_size(); - sg[0].ofs = addr & PAGE_MASK; + sg[0].page = addr / HYPERV_PAGE_SIZE; + sg[0].ofs = addr & HYPERV_PAGE_MASK; sg[0].len = RNDIS_PACKET_MSG_OFFSET_ABS(hn_rndis_pktlen(txd->rndis_pkt)); segs = 1; diff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h index 0f638bc5fd..f946b3d8ef 100644 --- a/drivers/net/netvsc/hn_var.h +++ b/drivers/net/netvsc/hn_var.h @@ -31,10 +31,6 @@ #define HN_RX_EXTMBUF_ENABLE 0 -#ifndef PAGE_MASK -#define PAGE_MASK (rte_mem_page_size() - 1) -#endif - struct hn_data; struct hn_txdesc; -- 2.43.0