Skip to contentSkip to conversation

net/mana: enable 32 bit build for mana driver

PATCH Superseded Wei Hu 2 participants 3 messages Sep 9, 2023 – Sep 12, 2023

Subsystems (2)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

Wei Hu

author
#0 lore raw

PATCH 1/1 net/mana: enable 32 bit build for mana driver

Enable 32 bit build on x86 Linux. Fixed build warnings and errors when building in 32 bit.

---
 drivers/net/mana/mana.c      |  2 +-
 drivers/net/mana/meson.build |  4 ++--
 drivers/net/mana/mr.c        | 18 +++++++++---------
 3 files changed, 12 insertions(+), 12 deletions(-)
drivers/net/mana/mana.c +1 -1
index 7630118d4f..a20ca1a988 100644
@@ -1260,7 +1260,7 @@ mana_probe_port(struct ibv_device *ibdev, struct ibv_device_attr_ex *dev_attr,
 	/* Create a parent domain with the port number */
 	attr.pd = priv->ib_pd;
 	attr.comp_mask = IBV_PARENT_DOMAIN_INIT_ATTR_PD_CONTEXT;
-	attr.pd_context = (void *)(uint64_t)port;
+	attr.pd_context = (void *)(size_t)port;
 	priv->ib_parent_pd = ibv_alloc_parent_domain(ctx, &attr);
 	if (!priv->ib_parent_pd) {
 		DRV_LOG(ERR, "ibv_alloc_parent_domain failed port %d", port);
drivers/net/mana/meson.build +2 -2
index 493f0d26d4..2d72eca5a8 100644
@@ -1,9 +1,9 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2022 Microsoft Corporation
 
-if not is_linux or not dpdk_conf.has('RTE_ARCH_X86_64')
+if not is_linux or not dpdk_conf.has('RTE_ARCH_X86')
     build = false
-    reason = 'only supported on x86_64 Linux'
+    reason = 'only supported on x86 Linux'
     subdir_done()
 endif
 
drivers/net/mana/mr.c +9 -9
index fec0dc961c..b8e6ea0bbf 100644
@@ -53,7 +53,7 @@ mana_new_pmd_mr(struct mana_mr_btree *local_tree, struct mana_priv *priv,
 		}
 
 		DP_LOG(DEBUG,
-		       "registering memory chunk start 0x%" PRIx64 " len %u",
+		       "registering memory chunk start 0x%" PRIxPTR " len %u",
 		       ranges[i].start, ranges[i].len);
 
 		if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
@@ -62,7 +62,7 @@ mana_new_pmd_mr(struct mana_mr_btree *local_tree, struct mana_priv *priv,
 						    ranges[i].len);
 			if (ret) {
 				DP_LOG(ERR,
-				       "MR failed start 0x%" PRIx64 " len %u",
+				       "MR failed start 0x%" PRIxPTR " len %u",
 				       ranges[i].start, ranges[i].len);
 				return ret;
 			}
@@ -72,7 +72,7 @@ mana_new_pmd_mr(struct mana_mr_btree *local_tree, struct mana_priv *priv,
 		ibv_mr = ibv_reg_mr(priv->ib_pd, (void *)ranges[i].start,
 				    ranges[i].len, IBV_ACCESS_LOCAL_WRITE);
 		if (ibv_mr) {
-			DP_LOG(DEBUG, "MR lkey %u addr %p len %" PRIu64,
+			DP_LOG(DEBUG, "MR lkey %u addr %p len %zu",
 			       ibv_mr->lkey, ibv_mr->addr, ibv_mr->length);
 
 			mr = rte_calloc("MANA MR", 1, sizeof(*mr), 0);
@@ -99,7 +99,7 @@ mana_new_pmd_mr(struct mana_mr_btree *local_tree, struct mana_priv *priv,
 				return ret;
 			}
 		} else {
-			DP_LOG(ERR, "MR failed at 0x%" PRIx64 " len %u",
+			DP_LOG(ERR, "MR failed at 0x%" PRIxPTR " len %u",
 			       ranges[i].start, ranges[i].len);
 			return -errno;
 		}
@@ -141,7 +141,7 @@ mana_find_pmd_mr(struct mana_mr_btree *local_mr_btree, struct mana_priv *priv,
 	mr = mana_mr_btree_lookup(local_mr_btree, &idx,
 				  (uintptr_t)mbuf->buf_addr, mbuf->buf_len);
 	if (mr) {
-		DP_LOG(DEBUG, "Local mr lkey %u addr 0x%" PRIx64 " len %" PRIu64,
+		DP_LOG(DEBUG, "Local mr lkey %u addr 0x%" PRIxPTR " len %zu",
 		       mr->lkey, mr->addr, mr->len);
 		return mr;
 	}
@@ -162,7 +162,7 @@ mana_find_pmd_mr(struct mana_mr_btree *local_mr_btree, struct mana_priv *priv,
 		}
 
 		DP_LOG(DEBUG,
-		       "Added local MR key %u addr 0x%" PRIx64 " len %" PRIu64,
+		       "Added local MR key %u addr 0x%" PRIxPTR " len %zu",
 		       mr->lkey, mr->addr, mr->len);
 		return mr;
 	}
@@ -266,7 +266,7 @@ mana_mr_btree_lookup(struct mana_mr_btree *bt, uint16_t *idx,
 		return &table[base];
 
 	DP_LOG(DEBUG,
-	       "addr 0x%" PRIx64 " len %zu idx %u sum 0x%" PRIx64 " not found",
+	       "addr 0x%" PRIxPTR " len %zu idx %u sum 0x%" PRIxPTR " not found",
 	       addr, len, *idx, addr + len);
 
 	return NULL;
@@ -316,7 +316,7 @@ mana_mr_btree_insert(struct mana_mr_btree *bt, struct mana_mr_cache *entry)
 	uint16_t shift;
 
 	if (mana_mr_btree_lookup(bt, &idx, entry->addr, entry->len)) {
-		DP_LOG(DEBUG, "Addr 0x%" PRIx64 " len %zu exists in btree",
+		DP_LOG(DEBUG, "Addr 0x%" PRIxPTR " len %zu exists in btree",
 		       entry->addr, entry->len);
 		return 0;
 	}
@@ -340,7 +340,7 @@ mana_mr_btree_insert(struct mana_mr_btree *bt, struct mana_mr_cache *entry)
 	bt->len++;
 
 	DP_LOG(DEBUG,
-	       "Inserted MR b-tree table %p idx %d addr 0x%" PRIx64 " len %zu",
+	       "Inserted MR b-tree table %p idx %d addr 0x%" PRIxPTR " len %zu",
 	       table, idx, entry->addr, entry->len);
 
 	return 0;
Signature · 1 line
2.34.1
#1 lore raw

drivers/net/mana/mana.c mana_probe_port(struct ibv_device *ibdev, struct ibv_device_attr_ex *dev_attr, · line 1263

Quoted 10 lines · On Sat, 9 Sep 2023 12:18:30 +0000 Wei Hu <[email protected]> wrote:
drivers/net/mana/mana.c +1 -1
index 7630118d4f..a20ca1a988 100644
@@ -1260,7 +1260,7 @@ mana_probe_port(struct ibv_device *ibdev, struct ibv_device_attr_ex *dev_attr,
 	/* Create a parent domain with the port number */
 	attr.pd = priv->ib_pd;
 	attr.comp_mask = IBV_PARENT_DOMAIN_INIT_ATTR_PD_CONTEXT;
-	attr.pd_context = (void *)(uint64_t)port;
+	attr.pd_context = (void *)(size_t)port;

Since port is uint8_t, the better cast would be to uintptr_t which is always an unsigned value of same size as pointer.

Also, not sure why using PRIxPTR is necessary; on all arch and platforms %p should work for printing a pointer and is more common usage.

author
#2 lore raw
Quoted 14 lines

From: Stephen Hemminger <[email protected]>
Sent: Saturday, September 9, 2023 10:52 PM

drivers/net/mana/mana.c mana_probe_port(struct ibv_device *ibdev,

Quoted 5 lines
drivers/net/mana/mana.c index renamed from drivers/net/mana/mana.c +0 -0

7630118d4f..a20ca1a988 100644

drivers/net/mana/mana.c +0 -0
@@ -1260,7 +1260,7 @@ mana_probe_port(struct ibv_device *ibdev,

struct ibv_device_attr_ex *dev_attr,

drivers/net/mana/mana.c mana_probe_port(struct ibv_device *ibdev, struct ibv_device_attr_ex *dev_attr, · line 1263

Quoted 5 lines
drivers/net/mana/mana.c +1 -1
      /* Create a parent domain with the port number */
      attr.pd = priv->ib_pd;
      attr.comp_mask = IBV_PARENT_DOMAIN_INIT_ATTR_PD_CONTEXT;
-     attr.pd_context = (void *)(uint64_t)port;
+     attr.pd_context = (void *)(size_t)port;
Quoted 5 lines

Since port is uint8_t, the better cast would be to uintptr_t which is always an unsigned value of same size as pointer.

Also, not sure why using PRIxPTR is necessary; on all arch and platforms %p should work for printing a pointer and is more common usage.

Thanks Stephen. I will send out a v2 with port casting to uintptr_t.

Regarding the use of PRIxPTR, I have seen this in couple other drivers. I think it is probably because the original variable is defined as uintptr_t, which was typedef'ed to unsigned long. We probably want to differentiate it from an actual pointer. And I was trying to stick to original code.

Wei