DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor
@ 2020-06-16  9:44 Ophir Munk
  2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 1/4] common/mlx5: remove MR struct dependency on ibv Ophir Munk
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Ophir Munk @ 2020-06-16  9:44 UTC (permalink / raw)
  To: dev, Matan Azrad, Raslan Darawsheh; +Cc: Ophir Munk

This patch series is part of preparing mlx5 PMD to compile and run under
multiple OSs. This series handles memory region refactoring.

Ophir Munk (4):
  common/mlx5: remove MR struct dependency on ibv
  common/mlx5: export MR verbs operations
  net/mlx5: add MR callbacks in per-device cache
  mlx5/linux: add MR callbacks to verbs operations struct

 drivers/common/mlx5/Makefile                    |  1 +
 drivers/common/mlx5/linux/meson.build           |  1 +
 drivers/common/mlx5/linux/mlx5_common_verbs.c   | 87 +++++++++++++++++++++++++
 drivers/common/mlx5/mlx5_common_mr.c            | 60 ++++++++---------
 drivers/common/mlx5/mlx5_common_mr.h            | 33 ++++++++--
 drivers/common/mlx5/rte_common_mlx5_version.map |  3 +
 drivers/net/mlx5/Makefile                       |  1 +
 drivers/net/mlx5/linux/meson.build              |  1 +
 drivers/net/mlx5/linux/mlx5_os.c                | 19 ++++++
 drivers/net/mlx5/linux/mlx5_verbs.c             | 78 ++++++++++++++++++++++
 drivers/net/mlx5/linux/mlx5_verbs.h             | 15 +++++
 drivers/net/mlx5/mlx5.c                         |  2 +
 drivers/net/mlx5/mlx5.h                         |  2 +
 drivers/net/mlx5/mlx5_mr.c                      |  6 +-
 14 files changed, 268 insertions(+), 41 deletions(-)
 create mode 100644 drivers/common/mlx5/linux/mlx5_common_verbs.c
 create mode 100644 drivers/net/mlx5/linux/mlx5_verbs.c
 create mode 100644 drivers/net/mlx5/linux/mlx5_verbs.h

-- 
2.8.4


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-dev] [PATCH v1 1/4] common/mlx5: remove MR struct dependency on ibv
  2020-06-16  9:44 [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor Ophir Munk
@ 2020-06-16  9:44 ` Ophir Munk
  2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 2/4] common/mlx5: export MR verbs operations Ophir Munk
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Ophir Munk @ 2020-06-16  9:44 UTC (permalink / raw)
  To: dev, Matan Azrad, Raslan Darawsheh; +Cc: Ophir Munk

Replace 'struct ibv_mr *' (in 'struct mlx5_mr') with a new 'struct
mlx5_pmd_mr'.  The new struct contains the required MR field: lkey,
addr, len and is independent of ibv.

Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
---
 drivers/common/mlx5/mlx5_common_mr.c | 60 ++++++++++++++++++++----------------
 drivers/common/mlx5/mlx5_common_mr.h | 11 +++++--
 2 files changed, 43 insertions(+), 28 deletions(-)

diff --git a/drivers/common/mlx5/mlx5_common_mr.c b/drivers/common/mlx5/mlx5_common_mr.c
index e894523..c68be54 100644
--- a/drivers/common/mlx5/mlx5_common_mr.c
+++ b/drivers/common/mlx5/mlx5_common_mr.c
@@ -266,18 +266,16 @@ mr_find_next_chunk(struct mlx5_mr *mr, struct mr_cache_entry *entry,
 
 	/* MR for external memory doesn't have memseg list. */
 	if (mr->msl == NULL) {
-		struct ibv_mr *ibv_mr = mr->ibv_mr;
-
 		MLX5_ASSERT(mr->ms_bmp_n == 1);
 		MLX5_ASSERT(mr->ms_n == 1);
 		MLX5_ASSERT(base_idx == 0);
 		/*
 		 * Can't search it from memseg list but get it directly from
-		 * verbs MR as there's only one chunk.
+		 * pmd_mr as there's only one chunk.
 		 */
-		entry->start = (uintptr_t)ibv_mr->addr;
-		entry->end = (uintptr_t)ibv_mr->addr + mr->ibv_mr->length;
-		entry->lkey = rte_cpu_to_be_32(mr->ibv_mr->lkey);
+		entry->start = (uintptr_t)mr->pmd_mr.addr;
+		entry->end = (uintptr_t)mr->pmd_mr.addr + mr->pmd_mr.len;
+		entry->lkey = rte_cpu_to_be_32(mr->pmd_mr.lkey);
 		/* Returning 1 ends iteration. */
 		return 1;
 	}
@@ -302,7 +300,7 @@ mr_find_next_chunk(struct mlx5_mr *mr, struct mr_cache_entry *entry,
 		/* Found one chunk. */
 		entry->start = start;
 		entry->end = end;
-		entry->lkey = rte_cpu_to_be_32(mr->ibv_mr->lkey);
+		entry->lkey = rte_cpu_to_be_32(mr->pmd_mr.lkey);
 	}
 	return idx;
 }
@@ -442,8 +440,8 @@ mr_free(struct mlx5_mr *mr)
 	if (mr == NULL)
 		return;
 	DRV_LOG(DEBUG, "freeing MR(%p):", (void *)mr);
-	if (mr->ibv_mr != NULL)
-		claim_zero(mlx5_glue->dereg_mr(mr->ibv_mr));
+	if (mr->pmd_mr.obj != NULL)
+		claim_zero(mlx5_glue->dereg_mr(mr->pmd_mr.obj));
 	if (mr->ms_bmp != NULL)
 		rte_bitmap_free(mr->ms_bmp);
 	rte_free(mr);
@@ -600,6 +598,7 @@ mlx5_mr_create_primary(void *pd,
 	uint32_t ms_n;
 	uint32_t n;
 	size_t len;
+	struct ibv_mr *ibv_mr;
 
 	DRV_LOG(DEBUG, "Creating a MR using address (%p)", (void *)addr);
 	/*
@@ -768,24 +767,28 @@ mlx5_mr_create_primary(void *pd,
 	 * mlx5_alloc_buf_extern() which eventually calls rte_malloc_socket()
 	 * through mlx5_alloc_verbs_buf().
 	 */
-	mr->ibv_mr = mlx5_glue->reg_mr(pd, (void *)data.start, len,
-				       IBV_ACCESS_LOCAL_WRITE |
-				       (haswell_broadwell_cpu ? 0 :
-				       IBV_ACCESS_RELAXED_ORDERING));
-	if (mr->ibv_mr == NULL) {
-		DEBUG("Fail to create a verbs MR for address (%p)",
+	ibv_mr = mlx5_glue->reg_mr(pd, (void *)data.start, len,
+				   IBV_ACCESS_LOCAL_WRITE |
+				   (haswell_broadwell_cpu ? 0 :
+				   IBV_ACCESS_RELAXED_ORDERING));
+	if (ibv_mr == NULL) {
+		DEBUG("Fail to create an MR for address (%p)",
 		      (void *)addr);
 		rte_errno = EINVAL;
 		goto err_mrlock;
 	}
-	MLX5_ASSERT((uintptr_t)mr->ibv_mr->addr == data.start);
-	MLX5_ASSERT(mr->ibv_mr->length == len);
+	mr->pmd_mr.lkey = ibv_mr->lkey;
+	mr->pmd_mr.addr = ibv_mr->addr;
+	mr->pmd_mr.len = ibv_mr->length;
+	mr->pmd_mr.obj = ibv_mr;
+	MLX5_ASSERT((uintptr_t)mr->pmd_mr.addr == data.start);
+	MLX5_ASSERT(mr->pmd_mr.len);
 	LIST_INSERT_HEAD(&share_cache->mr_list, mr, mr);
 	DEBUG("MR CREATED (%p) for %p:\n"
 	      "  [0x%" PRIxPTR ", 0x%" PRIxPTR "),"
 	      " lkey=0x%x base_idx=%u ms_n=%u, ms_bmp_n=%u",
 	      (void *)mr, (void *)addr, data.start, data.end,
-	      rte_cpu_to_be_32(mr->ibv_mr->lkey),
+	      rte_cpu_to_be_32(mr->pmd_mr.lkey),
 	      mr->ms_base_idx, mr->ms_n, mr->ms_bmp_n);
 	/* Insert to the global cache table. */
 	mlx5_mr_insert_cache(share_cache, mr);
@@ -1036,6 +1039,7 @@ mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl)
 struct mlx5_mr *
 mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id)
 {
+	struct ibv_mr *ibv_mr;
 	struct mlx5_mr *mr = NULL;
 
 	mr = rte_zmalloc_socket(NULL,
@@ -1044,17 +1048,21 @@ mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id)
 				RTE_CACHE_LINE_SIZE, socket_id);
 	if (mr == NULL)
 		return NULL;
-	mr->ibv_mr = mlx5_glue->reg_mr(pd, (void *)addr, len,
-				       IBV_ACCESS_LOCAL_WRITE |
-				       (haswell_broadwell_cpu ? 0 :
-				       IBV_ACCESS_RELAXED_ORDERING));
-	if (mr->ibv_mr == NULL) {
+	ibv_mr = mlx5_glue->reg_mr(pd, (void *)addr, len,
+				   IBV_ACCESS_LOCAL_WRITE |
+				   (haswell_broadwell_cpu ? 0 :
+				   IBV_ACCESS_RELAXED_ORDERING));
+	if (ibv_mr == NULL) {
 		DRV_LOG(WARNING,
-			"Fail to create a verbs MR for address (%p)",
+			"Fail to create MR for address (%p)",
 			(void *)addr);
 		rte_free(mr);
 		return NULL;
 	}
+	mr->pmd_mr.lkey = ibv_mr->lkey;
+	mr->pmd_mr.addr = ibv_mr->addr;
+	mr->pmd_mr.len = ibv_mr->length;
+	mr->pmd_mr.obj = ibv_mr;
 	mr->msl = NULL; /* Mark it is external memory. */
 	mr->ms_bmp = NULL;
 	mr->ms_n = 1;
@@ -1064,7 +1072,7 @@ mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id)
 		"  [0x%" PRIxPTR ", 0x%" PRIxPTR "),"
 		" lkey=0x%x base_idx=%u ms_n=%u, ms_bmp_n=%u",
 		(void *)mr, (void *)addr,
-		addr, addr + len, rte_cpu_to_be_32(mr->ibv_mr->lkey),
+		addr, addr + len, rte_cpu_to_be_32(mr->pmd_mr.lkey),
 		mr->ms_base_idx, mr->ms_n, mr->ms_bmp_n);
 	return mr;
 }
@@ -1089,7 +1097,7 @@ mlx5_mr_dump_cache(struct mlx5_mr_share_cache *share_cache __rte_unused)
 		unsigned int n;
 
 		DEBUG("MR[%u], LKey = 0x%x, ms_n = %u, ms_bmp_n = %u",
-		      mr_n++, rte_cpu_to_be_32(mr->ibv_mr->lkey),
+		      mr_n++, rte_cpu_to_be_32(mr->pmd_mr.lkey),
 		      mr->ms_n, mr->ms_bmp_n);
 		if (mr->ms_n == 0)
 			continue;
diff --git a/drivers/common/mlx5/mlx5_common_mr.h b/drivers/common/mlx5/mlx5_common_mr.h
index 7add4da..6f2dcec 100644
--- a/drivers/common/mlx5/mlx5_common_mr.h
+++ b/drivers/common/mlx5/mlx5_common_mr.h
@@ -31,10 +31,17 @@
 #define MLX5_MR_CACHE_N 8
 #define MLX5_MR_BTREE_CACHE_N 256
 
+/* mlx5 PMD MR struct. */
+struct mlx5_pmd_mr {
+	uint32_t	     lkey;
+	void		     *addr;
+	size_t		     len;
+	void		     *obj;  /* verbs mr object or devx umem object. */
+};
 /* Memory Region object. */
 struct mlx5_mr {
 	LIST_ENTRY(mlx5_mr) mr; /**< Pointer to the prev/next entry. */
-	struct ibv_mr *ibv_mr; /* Verbs Memory Region. */
+	struct mlx5_pmd_mr pmd_mr; /* PMD memory region. */
 	const struct rte_memseg_list *msl;
 	int ms_base_idx; /* Start index of msl->memseg_arr[]. */
 	int ms_n; /* Number of memsegs in use. */
@@ -46,7 +53,7 @@ struct mlx5_mr {
 struct mr_cache_entry {
 	uintptr_t start; /* Start address of MR. */
 	uintptr_t end; /* End address of MR. */
-	uint32_t lkey; /* rte_cpu_to_be_32(ibv_mr->lkey). */
+	uint32_t lkey; /* rte_cpu_to_be_32(lkey). */
 } __rte_packed;
 
 /* MR Cache table for Binary search. */
-- 
2.8.4


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-dev] [PATCH v1 2/4] common/mlx5: export MR verbs operations
  2020-06-16  9:44 [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor Ophir Munk
  2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 1/4] common/mlx5: remove MR struct dependency on ibv Ophir Munk
@ 2020-06-16  9:44 ` Ophir Munk
  2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 3/4] net/mlx5: add MR callbacks in per-device cache Ophir Munk
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Ophir Munk @ 2020-06-16  9:44 UTC (permalink / raw)
  To: dev, Matan Azrad, Raslan Darawsheh; +Cc: Ophir Munk

The glue verbs operations reg_mr and dereg_mr are wrapped and exported
in functions mlx5_common_verbs_reg_mr and mlx5_common_verbs_dereg_mr
respectively.  The exported functions are added to a new file
linux/mlx5_common_verbs.c.

Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
---
 drivers/common/mlx5/Makefile                    |  1 +
 drivers/common/mlx5/linux/meson.build           |  1 +
 drivers/common/mlx5/linux/mlx5_common_verbs.c   | 87 +++++++++++++++++++++++++
 drivers/common/mlx5/mlx5_common_mr.c            | 27 ++------
 drivers/common/mlx5/mlx5_common_mr.h            |  8 ++-
 drivers/common/mlx5/rte_common_mlx5_version.map |  3 +
 6 files changed, 104 insertions(+), 23 deletions(-)
 create mode 100644 drivers/common/mlx5/linux/mlx5_common_verbs.c

diff --git a/drivers/common/mlx5/Makefile b/drivers/common/mlx5/Makefile
index 4948fef..622bde4 100644
--- a/drivers/common/mlx5/Makefile
+++ b/drivers/common/mlx5/Makefile
@@ -18,6 +18,7 @@ SRCS-y += mlx5_devx_cmds.c
 SRCS-y += mlx5_common.c
 SRCS-y += linux/mlx5_common_os.c
 SRCS-y += linux/mlx5_nl.c
+SRCS-y += linux/mlx5_common_verbs.c
 SRCS-y += mlx5_common_mp.c
 SRCS-y += mlx5_common_mr.c
 ifeq ($(CONFIG_RTE_IBVERBS_LINK_DLOPEN),y)
diff --git a/drivers/common/mlx5/linux/meson.build b/drivers/common/mlx5/linux/meson.build
index ce065d9..638bb2b 100644
--- a/drivers/common/mlx5/linux/meson.build
+++ b/drivers/common/mlx5/linux/meson.build
@@ -47,6 +47,7 @@ endif
 
 sources += files('mlx5_nl.c')
 sources += files('mlx5_common_os.c')
+sources += files('mlx5_common_verbs.c')
 if not dlopen_ibverbs
 	sources += files('mlx5_glue.c')
 endif
diff --git a/drivers/common/mlx5/linux/mlx5_common_verbs.c b/drivers/common/mlx5/linux/mlx5_common_verbs.c
new file mode 100644
index 0000000..e7e50ad
--- /dev/null
+++ b/drivers/common/mlx5/linux/mlx5_common_verbs.c
@@ -0,0 +1,87 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2020 Mellanox Technologies, Ltd
+ */
+
+#include <stddef.h>
+#include <errno.h>
+#include <string.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <inttypes.h>
+
+/* Verbs header. */
+/* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */
+#include "mlx5_autoconf.h"
+#ifdef PEDANTIC
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+#ifdef HAVE_INFINIBAND_VERBS_H
+#include <infiniband/verbs.h>
+#endif
+#ifdef HAVE_INFINIBAND_MLX5DV_H
+#include <infiniband/mlx5dv.h>
+#endif
+#ifdef PEDANTIC
+#pragma GCC diagnostic error "-Wpedantic"
+#endif
+
+#include <mlx5_glue.h>
+#include <mlx5_common.h>
+#include <mlx5_common_mr.h>
+
+/**
+ * Register mr. Given protection doamin pointer, pointer to addr and length
+ * register the memory region.
+ *
+ * @param[in] pd
+ *   Pointer to protection domain context.
+ * @param[in] addr
+ *   Pointer to memory start address.
+ * @param[in] lentgh
+ *   Length of the memory to register.
+ * @param[out] pmd_mr
+ *   pmd_mr struct set with lkey, address, length and pointer to mr object
+ *
+ * @return
+ *   0 on successful registration, -1 otherwise
+ */
+int
+mlx5_common_verbs_reg_mr(void *pd, void *addr, size_t length,
+			 struct mlx5_pmd_mr *pmd_mr)
+{
+	struct ibv_mr *ibv_mr;
+
+	memset(pmd_mr, 0, sizeof(*pmd_mr));
+	ibv_mr = mlx5_glue->reg_mr(pd, addr, length,
+				   IBV_ACCESS_LOCAL_WRITE |
+				   (haswell_broadwell_cpu ? 0 :
+				   IBV_ACCESS_RELAXED_ORDERING));
+	if (!ibv_mr)
+		return -1;
+
+	*pmd_mr = (struct mlx5_pmd_mr){
+		.lkey = ibv_mr->lkey,
+		.addr = ibv_mr->addr,
+		.len = ibv_mr->length,
+		.obj = (void *)ibv_mr,
+	};
+	return 0;
+}
+
+/**
+ * Deregister mr. Given the mlx5 pmd MR - deregister the MR
+ *
+ * @param[in] pmd_mr
+ *   pmd_mr struct set with lkey, address, length and pointer to mr object
+ *
+ */
+void
+mlx5_common_verbs_dereg_mr(struct mlx5_pmd_mr *pmd_mr)
+{
+	if (pmd_mr && pmd_mr->obj != NULL) {
+		claim_zero(mlx5_glue->dereg_mr(pmd_mr->obj));
+		memset(pmd_mr, 0, sizeof(*pmd_mr));
+	}
+}
+
diff --git a/drivers/common/mlx5/mlx5_common_mr.c b/drivers/common/mlx5/mlx5_common_mr.c
index c68be54..4ce7975 100644
--- a/drivers/common/mlx5/mlx5_common_mr.c
+++ b/drivers/common/mlx5/mlx5_common_mr.c
@@ -440,8 +440,7 @@ mr_free(struct mlx5_mr *mr)
 	if (mr == NULL)
 		return;
 	DRV_LOG(DEBUG, "freeing MR(%p):", (void *)mr);
-	if (mr->pmd_mr.obj != NULL)
-		claim_zero(mlx5_glue->dereg_mr(mr->pmd_mr.obj));
+	mlx5_common_verbs_dereg_mr(&mr->pmd_mr);
 	if (mr->ms_bmp != NULL)
 		rte_bitmap_free(mr->ms_bmp);
 	rte_free(mr);
@@ -598,7 +597,6 @@ mlx5_mr_create_primary(void *pd,
 	uint32_t ms_n;
 	uint32_t n;
 	size_t len;
-	struct ibv_mr *ibv_mr;
 
 	DRV_LOG(DEBUG, "Creating a MR using address (%p)", (void *)addr);
 	/*
@@ -767,20 +765,13 @@ mlx5_mr_create_primary(void *pd,
 	 * mlx5_alloc_buf_extern() which eventually calls rte_malloc_socket()
 	 * through mlx5_alloc_verbs_buf().
 	 */
-	ibv_mr = mlx5_glue->reg_mr(pd, (void *)data.start, len,
-				   IBV_ACCESS_LOCAL_WRITE |
-				   (haswell_broadwell_cpu ? 0 :
-				   IBV_ACCESS_RELAXED_ORDERING));
-	if (ibv_mr == NULL) {
+	mlx5_common_verbs_reg_mr(pd, (void *)data.start, len, &mr->pmd_mr);
+	if (mr->pmd_mr.obj == NULL) {
 		DEBUG("Fail to create an MR for address (%p)",
 		      (void *)addr);
 		rte_errno = EINVAL;
 		goto err_mrlock;
 	}
-	mr->pmd_mr.lkey = ibv_mr->lkey;
-	mr->pmd_mr.addr = ibv_mr->addr;
-	mr->pmd_mr.len = ibv_mr->length;
-	mr->pmd_mr.obj = ibv_mr;
 	MLX5_ASSERT((uintptr_t)mr->pmd_mr.addr == data.start);
 	MLX5_ASSERT(mr->pmd_mr.len);
 	LIST_INSERT_HEAD(&share_cache->mr_list, mr, mr);
@@ -1039,7 +1030,6 @@ mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl)
 struct mlx5_mr *
 mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id)
 {
-	struct ibv_mr *ibv_mr;
 	struct mlx5_mr *mr = NULL;
 
 	mr = rte_zmalloc_socket(NULL,
@@ -1048,21 +1038,14 @@ mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id)
 				RTE_CACHE_LINE_SIZE, socket_id);
 	if (mr == NULL)
 		return NULL;
-	ibv_mr = mlx5_glue->reg_mr(pd, (void *)addr, len,
-				   IBV_ACCESS_LOCAL_WRITE |
-				   (haswell_broadwell_cpu ? 0 :
-				   IBV_ACCESS_RELAXED_ORDERING));
-	if (ibv_mr == NULL) {
+	mlx5_common_verbs_reg_mr(pd, (void *)addr, len, &mr->pmd_mr);
+	if (mr->pmd_mr.obj == NULL) {
 		DRV_LOG(WARNING,
 			"Fail to create MR for address (%p)",
 			(void *)addr);
 		rte_free(mr);
 		return NULL;
 	}
-	mr->pmd_mr.lkey = ibv_mr->lkey;
-	mr->pmd_mr.addr = ibv_mr->addr;
-	mr->pmd_mr.len = ibv_mr->length;
-	mr->pmd_mr.obj = ibv_mr;
 	mr->msl = NULL; /* Mark it is external memory. */
 	mr->ms_bmp = NULL;
 	mr->ms_n = 1;
diff --git a/drivers/common/mlx5/mlx5_common_mr.h b/drivers/common/mlx5/mlx5_common_mr.h
index 6f2dcec..cdb8acf 100644
--- a/drivers/common/mlx5/mlx5_common_mr.h
+++ b/drivers/common/mlx5/mlx5_common_mr.h
@@ -163,5 +163,11 @@ mlx5_mr_create_primary(void *pd,
 		       struct mlx5_mr_share_cache *share_cache,
 		       struct mr_cache_entry *entry, uintptr_t addr,
 		       unsigned int mr_ext_memseg_en);
-
+__rte_internal
+int
+mlx5_common_verbs_reg_mr(void *pd, void *addr, size_t length,
+			 struct mlx5_pmd_mr *pmd_mr);
+__rte_internal
+void
+mlx5_common_verbs_dereg_mr(struct mlx5_pmd_mr *pmd_mr);
 #endif /* RTE_PMD_MLX5_COMMON_MR_H_ */
diff --git a/drivers/common/mlx5/rte_common_mlx5_version.map b/drivers/common/mlx5/rte_common_mlx5_version.map
index 350e771..68f1207 100644
--- a/drivers/common/mlx5/rte_common_mlx5_version.map
+++ b/drivers/common/mlx5/rte_common_mlx5_version.map
@@ -3,6 +3,9 @@ INTERNAL {
 
 	mlx5_class_get;
 
+	mlx5_common_verbs_reg_mr;
+	mlx5_common_verbs_dereg_mr;
+
 	mlx5_create_mr_ext;
 
 	mlx5_dev_to_pci_addr;
-- 
2.8.4


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-dev] [PATCH v1 3/4] net/mlx5: add MR callbacks in per-device cache
  2020-06-16  9:44 [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor Ophir Munk
  2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 1/4] common/mlx5: remove MR struct dependency on ibv Ophir Munk
  2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 2/4] common/mlx5: export MR verbs operations Ophir Munk
@ 2020-06-16  9:44 ` Ophir Munk
  2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 4/4] mlx5/linux: add MR callbacks to verbs operations struct Ophir Munk
  2020-06-17 10:13 ` [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor Raslan Darawsheh
  4 siblings, 0 replies; 6+ messages in thread
From: Ophir Munk @ 2020-06-16  9:44 UTC (permalink / raw)
  To: dev, Matan Azrad, Raslan Darawsheh; +Cc: Ophir Munk

Prior to this commit MR operations were verbs based and hard coded under
common/mlx5/linux directory. This commit enables upper layers (e.g.
net/mlx5) to determine which MR operations to use. For example the net
layer could set devx based MR operations in non-Linux environments. The
reg_mr and dereg_mr callbacks are added to the global per-device MR
cache 'struct mlx5_mr_share_cache'.

Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
---
 drivers/common/mlx5/mlx5_common_mr.c | 23 ++++++++++++-----------
 drivers/common/mlx5/mlx5_common_mr.h | 14 ++++++++++++--
 drivers/net/mlx5/linux/mlx5_os.c     | 18 ++++++++++++++++++
 drivers/net/mlx5/mlx5.c              |  2 ++
 drivers/net/mlx5/mlx5.h              |  2 ++
 drivers/net/mlx5/mlx5_mr.c           |  6 ++++--
 6 files changed, 50 insertions(+), 15 deletions(-)

diff --git a/drivers/common/mlx5/mlx5_common_mr.c b/drivers/common/mlx5/mlx5_common_mr.c
index 4ce7975..564d618 100644
--- a/drivers/common/mlx5/mlx5_common_mr.c
+++ b/drivers/common/mlx5/mlx5_common_mr.c
@@ -435,12 +435,12 @@ mlx5_mr_lookup_cache(struct mlx5_mr_share_cache *share_cache,
  *   Pointer to MR to free.
  */
 static void
-mr_free(struct mlx5_mr *mr)
+mr_free(struct mlx5_mr *mr, mlx5_dereg_mr_t dereg_mr_cb)
 {
 	if (mr == NULL)
 		return;
 	DRV_LOG(DEBUG, "freeing MR(%p):", (void *)mr);
-	mlx5_common_verbs_dereg_mr(&mr->pmd_mr);
+	dereg_mr_cb(&mr->pmd_mr);
 	if (mr->ms_bmp != NULL)
 		rte_bitmap_free(mr->ms_bmp);
 	rte_free(mr);
@@ -490,7 +490,7 @@ mlx5_mr_garbage_collect(struct mlx5_mr_share_cache *share_cache)
 		struct mlx5_mr *mr = mr_next;
 
 		mr_next = LIST_NEXT(mr, mr);
-		mr_free(mr);
+		mr_free(mr, share_cache->dereg_mr_cb);
 	}
 }
 
@@ -702,7 +702,7 @@ mlx5_mr_create_primary(void *pd,
 		data.start = RTE_ALIGN_FLOOR(addr, msl->page_sz);
 		data.end = data.start + msl->page_sz;
 		rte_mcfg_mem_read_unlock();
-		mr_free(mr);
+		mr_free(mr, share_cache->dereg_mr_cb);
 		goto alloc_resources;
 	}
 	MLX5_ASSERT(data.msl == data_re.msl);
@@ -725,7 +725,7 @@ mlx5_mr_create_primary(void *pd,
 		 * Must be unlocked before calling rte_free() because
 		 * mlx5_mr_mem_event_free_cb() can be called inside.
 		 */
-		mr_free(mr);
+		mr_free(mr, share_cache->dereg_mr_cb);
 		return entry->lkey;
 	}
 	/*
@@ -760,12 +760,12 @@ mlx5_mr_create_primary(void *pd,
 	mr->ms_bmp_n = len / msl->page_sz;
 	MLX5_ASSERT(ms_idx_shift + mr->ms_bmp_n <= ms_n);
 	/*
-	 * Finally create a verbs MR for the memory chunk. ibv_reg_mr() can be
-	 * called with holding the memory lock because it doesn't use
+	 * Finally create an MR for the memory chunk. Verbs: ibv_reg_mr() can
+	 * be called with holding the memory lock because it doesn't use
 	 * mlx5_alloc_buf_extern() which eventually calls rte_malloc_socket()
 	 * through mlx5_alloc_verbs_buf().
 	 */
-	mlx5_common_verbs_reg_mr(pd, (void *)data.start, len, &mr->pmd_mr);
+	share_cache->reg_mr_cb(pd, (void *)data.start, len, &mr->pmd_mr);
 	if (mr->pmd_mr.obj == NULL) {
 		DEBUG("Fail to create an MR for address (%p)",
 		      (void *)addr);
@@ -801,7 +801,7 @@ mlx5_mr_create_primary(void *pd,
 	 * calling rte_free() because mlx5_mr_mem_event_free_cb() can be called
 	 * inside.
 	 */
-	mr_free(mr);
+	mr_free(mr, share_cache->dereg_mr_cb);
 	return UINT32_MAX;
 }
 
@@ -1028,7 +1028,8 @@ mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl)
  *   Pointer to MR structure on success, NULL otherwise.
  */
 struct mlx5_mr *
-mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id)
+mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id,
+		   mlx5_reg_mr_t reg_mr_cb)
 {
 	struct mlx5_mr *mr = NULL;
 
@@ -1038,7 +1039,7 @@ mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id)
 				RTE_CACHE_LINE_SIZE, socket_id);
 	if (mr == NULL)
 		return NULL;
-	mlx5_common_verbs_reg_mr(pd, (void *)addr, len, &mr->pmd_mr);
+	reg_mr_cb(pd, (void *)addr, len, &mr->pmd_mr);
 	if (mr->pmd_mr.obj == NULL) {
 		DRV_LOG(WARNING,
 			"Fail to create MR for address (%p)",
diff --git a/drivers/common/mlx5/mlx5_common_mr.h b/drivers/common/mlx5/mlx5_common_mr.h
index cdb8acf..b23ee66 100644
--- a/drivers/common/mlx5/mlx5_common_mr.h
+++ b/drivers/common/mlx5/mlx5_common_mr.h
@@ -38,6 +38,14 @@ struct mlx5_pmd_mr {
 	size_t		     len;
 	void		     *obj;  /* verbs mr object or devx umem object. */
 };
+
+/**
+ * mr operations typedef
+ */
+typedef int (*mlx5_reg_mr_t)(void *pd, void *addr, size_t length,
+			     struct mlx5_pmd_mr *pmd_mr);
+typedef void (*mlx5_dereg_mr_t)(struct mlx5_pmd_mr *pmd_mr);
+
 /* Memory Region object. */
 struct mlx5_mr {
 	LIST_ENTRY(mlx5_mr) mr; /**< Pointer to the prev/next entry. */
@@ -83,6 +91,8 @@ struct mlx5_mr_share_cache {
 	struct mlx5_mr_btree cache; /* Global MR cache table. */
 	struct mlx5_mr_list mr_list; /* Registered MR list. */
 	struct mlx5_mr_list mr_free_list; /* Freed MR list. */
+	mlx5_reg_mr_t reg_mr_cb; /* Callback to reg_mr func */
+	mlx5_dereg_mr_t dereg_mr_cb; /* Callback to dereg_mr func */
 } __rte_packed;
 
 /**
@@ -155,8 +165,8 @@ mlx5_mr_lookup_list(struct mlx5_mr_share_cache *share_cache,
 		    struct mr_cache_entry *entry, uintptr_t addr);
 __rte_internal
 struct mlx5_mr *
-mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len,
-		   int socket_id);
+mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id,
+		   mlx5_reg_mr_t reg_mr_cb);
 __rte_internal
 uint32_t
 mlx5_mr_create_primary(void *pd,
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 844c6c0..f498d00 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -42,6 +42,7 @@
 #include <mlx5_devx_cmds.h>
 #include <mlx5_common.h>
 #include <mlx5_common_mp.h>
+#include <mlx5_common_mr.h>
 
 #include "mlx5_defs.h"
 #include "mlx5.h"
@@ -2321,6 +2322,23 @@ mlx5_os_stats_init(struct rte_eth_dev *dev)
 	rte_free(strings);
 }
 
+/**
+ * Set the reg_mr and dereg_mr call backs
+ *
+ * @param reg_mr_cb[out]
+ *   Pointer to reg_mr func
+ * @param dereg_mr_cb[out]
+ *   Pointer to dereg_mr func
+ *
+ */
+void
+mlx5_os_set_reg_mr_cb(mlx5_reg_mr_t *reg_mr_cb,
+		      mlx5_dereg_mr_t *dereg_mr_cb)
+{
+	*reg_mr_cb = mlx5_common_verbs_reg_mr;
+	*dereg_mr_cb = mlx5_common_verbs_dereg_mr;
+}
+
 const struct eth_dev_ops mlx5_os_dev_ops = {
 	.dev_configure = mlx5_dev_configure,
 	.dev_start = mlx5_dev_start,
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index b22acbb..5c86f6f 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -713,6 +713,8 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn,
 		err = rte_errno;
 		goto error;
 	}
+	mlx5_os_set_reg_mr_cb(&sh->share_cache.reg_mr_cb,
+			      &sh->share_cache.dereg_mr_cb);
 	mlx5_os_dev_shared_handler_install(sh);
 	mlx5_flow_aging_init(sh);
 	mlx5_flow_counters_mng_init(sh);
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 94a3667..5bd5acd 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -940,4 +940,6 @@ int mlx5_os_read_dev_stat(struct mlx5_priv *priv,
 int mlx5_os_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats);
 int mlx5_os_get_stats_n(struct rte_eth_dev *dev);
 void mlx5_os_stats_init(struct rte_eth_dev *dev);
+void mlx5_os_set_reg_mr_cb(mlx5_reg_mr_t *reg_mr_cb,
+			   mlx5_dereg_mr_t *dereg_mr_cb);
 #endif /* RTE_PMD_MLX5_H_ */
diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c
index c91d6a4..adbe07c 100644
--- a/drivers/net/mlx5/mlx5_mr.c
+++ b/drivers/net/mlx5/mlx5_mr.c
@@ -276,7 +276,8 @@ mlx5_mr_update_ext_mp_cb(struct rte_mempool *mp, void *opaque,
 		return;
 	DRV_LOG(DEBUG, "port %u register MR for chunk #%d of mempool (%s)",
 		dev->data->port_id, mem_idx, mp->name);
-	mr = mlx5_create_mr_ext(sh->pd, addr, len, mp->socket_id);
+	mr = mlx5_create_mr_ext(sh->pd, addr, len, mp->socket_id,
+				sh->share_cache.reg_mr_cb);
 	if (!mr) {
 		DRV_LOG(WARNING,
 			"port %u unable to allocate a new MR of"
@@ -350,7 +351,8 @@ mlx5_dma_map(struct rte_pci_device *pdev, void *addr,
 	}
 	priv = dev->data->dev_private;
 	sh = priv->sh;
-	mr = mlx5_create_mr_ext(sh->pd, (uintptr_t)addr, len, SOCKET_ID_ANY);
+	mr = mlx5_create_mr_ext(sh->pd, (uintptr_t)addr, len, SOCKET_ID_ANY,
+				sh->share_cache.reg_mr_cb);
 	if (!mr) {
 		DRV_LOG(WARNING,
 			"port %u unable to dma map", dev->data->port_id);
-- 
2.8.4


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [dpdk-dev] [PATCH v1 4/4] mlx5/linux: add MR callbacks to verbs operations struct
  2020-06-16  9:44 [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor Ophir Munk
                   ` (2 preceding siblings ...)
  2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 3/4] net/mlx5: add MR callbacks in per-device cache Ophir Munk
@ 2020-06-16  9:44 ` Ophir Munk
  2020-06-17 10:13 ` [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor Raslan Darawsheh
  4 siblings, 0 replies; 6+ messages in thread
From: Ophir Munk @ 2020-06-16  9:44 UTC (permalink / raw)
  To: dev, Matan Azrad, Raslan Darawsheh; +Cc: Ophir Munk

Create a set of verbs callbacks in 'struct mlx5_verbs_ops'
and add MR operations to it (file net/mlx5/linux/mlx5_verbs.c).

Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
---
 drivers/net/mlx5/Makefile           |  1 +
 drivers/net/mlx5/linux/meson.build  |  1 +
 drivers/net/mlx5/linux/mlx5_os.c    |  5 ++-
 drivers/net/mlx5/linux/mlx5_verbs.c | 78 +++++++++++++++++++++++++++++++++++++
 drivers/net/mlx5/linux/mlx5_verbs.h | 15 +++++++
 5 files changed, 98 insertions(+), 2 deletions(-)
 create mode 100644 drivers/net/mlx5/linux/mlx5_verbs.c
 create mode 100644 drivers/net/mlx5/linux/mlx5_verbs.h

diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile
index fada6fb..a458402 100644
--- a/drivers/net/mlx5/Makefile
+++ b/drivers/net/mlx5/Makefile
@@ -34,6 +34,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_utils.c
 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += linux/mlx5_socket.c
 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += linux/mlx5_os.c
 SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += linux/mlx5_ethdev_os.c
+SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += linux/mlx5_verbs.c
 
 # Basic CFLAGS.
 CFLAGS += -O3
diff --git a/drivers/net/mlx5/linux/meson.build b/drivers/net/mlx5/linux/meson.build
index ad908c4..14eed03 100644
--- a/drivers/net/mlx5/linux/meson.build
+++ b/drivers/net/mlx5/linux/meson.build
@@ -6,5 +6,6 @@ sources += files(
 	'mlx5_socket.c',
 	'mlx5_os.c',
 	'mlx5_ethdev_os.c',
+	'mlx5_verbs.c',
 )
 
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index f498d00..3792371 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -52,6 +52,7 @@
 #include "mlx5_mr.h"
 #include "mlx5_flow.h"
 #include "rte_pmd_mlx5.h"
+#include "mlx5_verbs.h"
 
 #define MLX5_TAGS_HLIST_ARRAY_SIZE 8192
 
@@ -2335,8 +2336,8 @@ void
 mlx5_os_set_reg_mr_cb(mlx5_reg_mr_t *reg_mr_cb,
 		      mlx5_dereg_mr_t *dereg_mr_cb)
 {
-	*reg_mr_cb = mlx5_common_verbs_reg_mr;
-	*dereg_mr_cb = mlx5_common_verbs_dereg_mr;
+	*reg_mr_cb = mlx5_verbs_ops.reg_mr;
+	*dereg_mr_cb = mlx5_verbs_ops.dereg_mr;
 }
 
 const struct eth_dev_ops mlx5_os_dev_ops = {
diff --git a/drivers/net/mlx5/linux/mlx5_verbs.c b/drivers/net/mlx5/linux/mlx5_verbs.c
new file mode 100644
index 0000000..8e42ec8
--- /dev/null
+++ b/drivers/net/mlx5/linux/mlx5_verbs.c
@@ -0,0 +1,78 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2020 Mellanox Technologies, Ltd
+ */
+
+#include <stddef.h>
+#include <errno.h>
+#include <string.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <inttypes.h>
+
+/* Verbs header. */
+/* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */
+#include "mlx5_autoconf.h"
+#ifdef PEDANTIC
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+#ifdef HAVE_INFINIBAND_VERBS_H
+#include <infiniband/verbs.h>
+#endif
+#ifdef HAVE_INFINIBAND_MLX5DV_H
+#include <infiniband/mlx5dv.h>
+#endif
+#ifdef PEDANTIC
+#pragma GCC diagnostic error "-Wpedantic"
+#endif
+
+#include <rte_mbuf.h>
+#include <rte_malloc.h>
+#include <rte_ethdev_driver.h>
+#include <rte_common.h>
+
+#include <mlx5_glue.h>
+#include <mlx5_common.h>
+#include <mlx5_common_mr.h>
+#include <mlx5_verbs.h>
+/**
+ * Register mr. Given protection doamin pointer, pointer to addr and length
+ * register the memory region.
+ *
+ * @param[in] pd
+ *   Pointer to protection domain context.
+ * @param[in] addr
+ *   Pointer to memory start address.
+ * @param[in] lentgh
+ *   Length of the memory to register.
+ * @param[out] pmd_mr
+ *   pmd_mr struct set with lkey, address, length and pointer to mr object
+ *
+ * @return
+ *   0 on successful registration, -1 otherwise
+ */
+static int
+mlx5_reg_mr(void *pd, void *addr, size_t length,
+		 struct mlx5_pmd_mr *pmd_mr)
+{
+	return mlx5_common_verbs_reg_mr(pd, addr, length, pmd_mr);
+}
+
+/**
+ * Deregister mr. Given the mlx5 pmd MR - deregister the MR
+ *
+ * @param[in] pmd_mr
+ *   pmd_mr struct set with lkey, address, length and pointer to mr object
+ *
+ */
+static void
+mlx5_dereg_mr(struct mlx5_pmd_mr *pmd_mr)
+{
+	mlx5_common_verbs_dereg_mr(pmd_mr);
+}
+
+/* verbs operations. */
+const struct mlx5_verbs_ops mlx5_verbs_ops = {
+	.reg_mr = mlx5_reg_mr,
+	.dereg_mr = mlx5_dereg_mr,
+};
diff --git a/drivers/net/mlx5/linux/mlx5_verbs.h b/drivers/net/mlx5/linux/mlx5_verbs.h
new file mode 100644
index 0000000..4f0b637
--- /dev/null
+++ b/drivers/net/mlx5/linux/mlx5_verbs.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2020 Mellanox Technologies, Ltd
+ */
+
+#ifndef RTE_PMD_MLX5_VERBS_H_
+#define RTE_PMD_MLX5_VERBS_H_
+
+struct mlx5_verbs_ops {
+	mlx5_reg_mr_t reg_mr;
+	mlx5_dereg_mr_t dereg_mr;
+};
+
+/* Verbs ops struct */
+extern const struct mlx5_verbs_ops mlx5_verbs_ops;
+#endif /* RTE_PMD_MLX5_VERBS_H_ */
-- 
2.8.4


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor
  2020-06-16  9:44 [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor Ophir Munk
                   ` (3 preceding siblings ...)
  2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 4/4] mlx5/linux: add MR callbacks to verbs operations struct Ophir Munk
@ 2020-06-17 10:13 ` Raslan Darawsheh
  4 siblings, 0 replies; 6+ messages in thread
From: Raslan Darawsheh @ 2020-06-17 10:13 UTC (permalink / raw)
  To: Ophir Munk, dev, Matan Azrad

Hi,
> -----Original Message-----
> From: Ophir Munk <ophirmu@mellanox.com>
> Sent: Tuesday, June 16, 2020 12:45 PM
> To: dev@dpdk.org; Matan Azrad <matan@mellanox.com>; Raslan
> Darawsheh <rasland@mellanox.com>
> Cc: Ophir Munk <ophirmu@mellanox.com>
> Subject: [PATCH v1 0/4] mlx5 MR refactor
> 
> This patch series is part of preparing mlx5 PMD to compile and run under
> multiple OSs. This series handles memory region refactoring.
> 
> Ophir Munk (4):
>   common/mlx5: remove MR struct dependency on ibv
>   common/mlx5: export MR verbs operations
>   net/mlx5: add MR callbacks in per-device cache
>   mlx5/linux: add MR callbacks to verbs operations struct
> 
>  drivers/common/mlx5/Makefile                    |  1 +
>  drivers/common/mlx5/linux/meson.build           |  1 +
>  drivers/common/mlx5/linux/mlx5_common_verbs.c   | 87
> +++++++++++++++++++++++++
>  drivers/common/mlx5/mlx5_common_mr.c            | 60 ++++++++---------
>  drivers/common/mlx5/mlx5_common_mr.h            | 33 ++++++++--
>  drivers/common/mlx5/rte_common_mlx5_version.map |  3 +
>  drivers/net/mlx5/Makefile                       |  1 +
>  drivers/net/mlx5/linux/meson.build              |  1 +
>  drivers/net/mlx5/linux/mlx5_os.c                | 19 ++++++
>  drivers/net/mlx5/linux/mlx5_verbs.c             | 78
> ++++++++++++++++++++++
>  drivers/net/mlx5/linux/mlx5_verbs.h             | 15 +++++
>  drivers/net/mlx5/mlx5.c                         |  2 +
>  drivers/net/mlx5/mlx5.h                         |  2 +
>  drivers/net/mlx5/mlx5_mr.c                      |  6 +-
>  14 files changed, 268 insertions(+), 41 deletions(-)
>  create mode 100644 drivers/common/mlx5/linux/mlx5_common_verbs.c
>  create mode 100644 drivers/net/mlx5/linux/mlx5_verbs.c
>  create mode 100644 drivers/net/mlx5/linux/mlx5_verbs.h
> 
> --
> 2.8.4

Series applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-06-17 10:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-16  9:44 [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor Ophir Munk
2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 1/4] common/mlx5: remove MR struct dependency on ibv Ophir Munk
2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 2/4] common/mlx5: export MR verbs operations Ophir Munk
2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 3/4] net/mlx5: add MR callbacks in per-device cache Ophir Munk
2020-06-16  9:44 ` [dpdk-dev] [PATCH v1 4/4] mlx5/linux: add MR callbacks to verbs operations struct Ophir Munk
2020-06-17 10:13 ` [dpdk-dev] [PATCH v1 0/4] mlx5 MR refactor Raslan Darawsheh

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).