From: Long Li <lon...@microsoft.com>

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: sta...@dpdk.org
Signed-off-by: Long Li <lon...@microsoft.com>
---
 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.34.1

Reply via email to