From: Yishai Hadas <yishaih@mellanox.com>
To: linux-rdma@vger.kernel.org
Cc: jgg@mellanox.com, yishaih@mellanox.com, maorg@mellanox.com
Subject: [PATCH rdma-core 09/13] verbs: Introduce ibv_import/unimport_mr() verbs
Date: Wed, 17 Jun 2020 10:45:52 +0300 [thread overview]
Message-ID: <1592379956-7043-10-git-send-email-yishaih@mellanox.com> (raw)
In-Reply-To: <1592379956-7043-1-git-send-email-yishaih@mellanox.com>
Introduce ibv_import/unimport_mr() verbs, this enables an application which
previously imported the device and an associated PD to import an MR that
is associated with.
A detailed man page as part of this patch describes the expected usage
and flow.
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
---
debian/libibverbs1.symbols | 2 ++
libibverbs/driver.h | 3 ++
libibverbs/dummy_ops.c | 15 ++++++++++
libibverbs/libibverbs.map.in | 2 ++
libibverbs/man/CMakeLists.txt | 2 ++
libibverbs/man/ibv_import_mr.3.md | 63 +++++++++++++++++++++++++++++++++++++++
libibverbs/verbs.c | 16 ++++++++++
libibverbs/verbs.h | 10 +++++++
8 files changed, 113 insertions(+)
create mode 100644 libibverbs/man/ibv_import_mr.3.md
diff --git a/debian/libibverbs1.symbols b/debian/libibverbs1.symbols
index ee32bf4..abc27d8 100644
--- a/debian/libibverbs1.symbols
+++ b/debian/libibverbs1.symbols
@@ -68,6 +68,7 @@ libibverbs.so.1 libibverbs1 #MINVER#
ibv_get_pkey_index@IBVERBS_1.5 20
ibv_get_sysfs_path@IBVERBS_1.0 1.1.6
ibv_import_device@IBVERBS_1.10 31
+ ibv_import_mr@IBVERBS_1.10 31
ibv_import_pd@IBVERBS_1.10 31
ibv_init_ah_from_wc@IBVERBS_1.1 1.1.6
ibv_modify_qp@IBVERBS_1.0 1.1.6
@@ -103,6 +104,7 @@ libibverbs.so.1 libibverbs1 #MINVER#
ibv_resize_cq@IBVERBS_1.0 1.1.6
ibv_resize_cq@IBVERBS_1.1 1.1.6
ibv_resolve_eth_l2_from_gid@IBVERBS_1.1 1.2.0
+ ibv_unimport_mr@IBVERBS_1.10 31
ibv_unimport_pd@IBVERBS_1.10 31
ibv_wc_status_str@IBVERBS_1.1 1.1.6
mbps_to_ibv_rate@IBVERBS_1.1 1.1.8
diff --git a/libibverbs/driver.h b/libibverbs/driver.h
index fbf63f3..0edff0b 100644
--- a/libibverbs/driver.h
+++ b/libibverbs/driver.h
@@ -311,6 +311,8 @@ struct verbs_context_ops {
void (*free_context)(struct ibv_context *context);
int (*free_dm)(struct ibv_dm *dm);
int (*get_srq_num)(struct ibv_srq *srq, uint32_t *srq_num);
+ struct ibv_mr *(*import_mr)(struct ibv_pd *pd,
+ uint32_t mr_handle);
struct ibv_pd *(*import_pd)(struct ibv_context *context,
uint32_t pd_handle);
int (*modify_cq)(struct ibv_cq *cq, struct ibv_modify_cq_attr *attr);
@@ -363,6 +365,7 @@ struct verbs_context_ops {
int (*rereg_mr)(struct verbs_mr *vmr, int flags, struct ibv_pd *pd,
void *addr, size_t length, int access);
int (*resize_cq)(struct ibv_cq *cq, int cqe);
+ void (*unimport_mr)(struct ibv_mr *mr);
void (*unimport_pd)(struct ibv_pd *pd);
};
diff --git a/libibverbs/dummy_ops.c b/libibverbs/dummy_ops.c
index 9d6d2af..ac5b4ec 100644
--- a/libibverbs/dummy_ops.c
+++ b/libibverbs/dummy_ops.c
@@ -287,6 +287,13 @@ static int get_srq_num(struct ibv_srq *srq, uint32_t *srq_num)
return EOPNOTSUPP;
}
+static struct ibv_mr *import_mr(struct ibv_pd *pd,
+ uint32_t mr_handle)
+{
+ errno = EOPNOTSUPP;
+ return NULL;
+}
+
static struct ibv_pd *import_pd(struct ibv_context *context,
uint32_t pd_handle)
{
@@ -457,6 +464,10 @@ static int resize_cq(struct ibv_cq *cq, int cqe)
return EOPNOTSUPP;
}
+static void unimport_mr(struct ibv_mr *mr)
+{
+}
+
static void unimport_pd(struct ibv_pd *pd)
{
}
@@ -515,6 +526,7 @@ const struct verbs_context_ops verbs_dummy_ops = {
free_context,
free_dm,
get_srq_num,
+ import_mr,
import_pd,
modify_cq,
modify_flow_action_esp,
@@ -541,6 +553,7 @@ const struct verbs_context_ops verbs_dummy_ops = {
req_notify_cq,
rereg_mr,
resize_cq,
+ unimport_mr,
unimport_pd,
};
@@ -633,6 +646,7 @@ void verbs_set_ops(struct verbs_context *vctx,
SET_PRIV_OP_IC(ctx, free_context);
SET_OP(vctx, free_dm);
SET_OP(vctx, get_srq_num);
+ SET_PRIV_OP_IC(vctx, import_mr);
SET_PRIV_OP_IC(vctx, import_pd);
SET_OP(vctx, modify_cq);
SET_OP(vctx, modify_flow_action_esp);
@@ -659,6 +673,7 @@ void verbs_set_ops(struct verbs_context *vctx,
SET_OP(ctx, req_notify_cq);
SET_PRIV_OP(ctx, rereg_mr);
SET_PRIV_OP(ctx, resize_cq);
+ SET_PRIV_OP_IC(vctx, unimport_mr);
SET_PRIV_OP_IC(vctx, unimport_pd);
#undef SET_OP
diff --git a/libibverbs/libibverbs.map.in b/libibverbs/libibverbs.map.in
index d356e63..5f52a9e 100644
--- a/libibverbs/libibverbs.map.in
+++ b/libibverbs/libibverbs.map.in
@@ -134,7 +134,9 @@ IBVERBS_1.9 {
IBVERBS_1.10 {
global:
ibv_import_device;
+ ibv_import_mr;
ibv_import_pd;
+ ibv_unimport_mr;
ibv_unimport_pd;
} IBVERBS_1.9;
diff --git a/libibverbs/man/CMakeLists.txt b/libibverbs/man/CMakeLists.txt
index 422d6fd..2cbb3cf 100644
--- a/libibverbs/man/CMakeLists.txt
+++ b/libibverbs/man/CMakeLists.txt
@@ -38,6 +38,7 @@ rdma_man_pages(
ibv_get_pkey_index.3.md
ibv_get_srq_num.3.md
ibv_import_device.3.md
+ ibv_import_mr.3.md
ibv_import_pd.3.md
ibv_inc_rkey.3.md
ibv_modify_qp.3
@@ -101,6 +102,7 @@ rdma_alias_man_pages(
ibv_get_cq_event.3 ibv_ack_cq_events.3
ibv_get_device_list.3 ibv_free_device_list.3
ibv_import_pd.3 ibv_unimport_pd.3
+ ibv_import_mr.3 ibv_unimport_mr.3
ibv_open_device.3 ibv_close_device.3
ibv_open_xrcd.3 ibv_close_xrcd.3
ibv_rate_to_mbps.3 mbps_to_ibv_rate.3
diff --git a/libibverbs/man/ibv_import_mr.3.md b/libibverbs/man/ibv_import_mr.3.md
new file mode 100644
index 0000000..546c034
--- /dev/null
+++ b/libibverbs/man/ibv_import_mr.3.md
@@ -0,0 +1,63 @@
+---
+date: 2020-5-3
+footer: libibverbs
+header: "Libibverbs Programmer's Manual"
+layout: page
+license: 'Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md'
+section: 3
+title: ibv_import_mr ibv_unimport_mr
+---
+
+# NAME
+
+ibv_import_mr - import an MR from a given ibv_pd
+
+ibv_unimport_mr - unimport an MR
+
+# SYNOPSIS
+
+```c
+#include <infiniband/verbs.h>
+
+struct ibv_mr *ibv_import_mr(struct ibv_pd *pd, uint32_t mr_handle);
+void ibv_unimport_mr(struct ibv_mr *mr)
+
+```
+
+
+# DESCRIPTION
+
+**ibv_import_mr()** returns a Memory region (MR) that is associated with the given
+*mr_handle* in the RDMA context that assosicated with the given *pd*.
+
+The input *mr_handle* value must be a valid kernel handle for an MR object in the assosicated RDMA context.
+
+**ibv_unimport_mr()** un import the MR.
+Once the MR usage has been ended ibv_dereg_mr() or ibv_unimport_mr() should be called.
+The first one will go to the kernel to destroy the object once the second one way cleanup what
+ever is needed/opposite of the import without calling the kernel.
+
+This is the responsibility of the application to coordinate between all ibv_context(s) that use this MR.
+Once destroy is done no other process can touch the object except for unimport. All users of the context must
+collaborate to ensure this.
+
+# RETURN VALUE
+
+**ibv_import_mr()** returns a pointer to the allocated MR, or NULL if the request fails.
+
+# NOTES
+
+The *addr* field in the imported MR is not applicable, NULL value is expected.
+
+# SEE ALSO
+
+**ibv_reg_mr**(3),
+**ibv_reg_dm_mr**(3),
+**ibv_reg_mr_iova**(3),
+**ibv_reg_mr_iova2**(3),
+**ibv_dereg_mr**(3),
+
+# AUTHOR
+
+Yishai Hadas <yishaih@mellanox.com>
+
diff --git a/libibverbs/verbs.c b/libibverbs/verbs.c
index 9380146..84658a8 100644
--- a/libibverbs/verbs.c
+++ b/libibverbs/verbs.c
@@ -366,6 +366,22 @@ void ibv_unimport_pd(struct ibv_pd *pd)
}
+/**
+ * ibv_import_mr - Import a memory region
+ */
+struct ibv_mr *ibv_import_mr(struct ibv_pd *pd, uint32_t mr_handle)
+{
+ return get_ops(pd->context)->import_mr(pd, mr_handle);
+}
+
+/**
+ * ibv_unimport_mr - Unimport a memory region
+ */
+void ibv_unimport_mr(struct ibv_mr *mr)
+{
+ get_ops(mr->context)->unimport_mr(mr);
+}
+
LATEST_SYMVER_FUNC(ibv_rereg_mr, 1_1, "IBVERBS_1.1",
int,
struct ibv_mr *mr, int flags,
diff --git a/libibverbs/verbs.h b/libibverbs/verbs.h
index 632ddb9..d009d7c 100644
--- a/libibverbs/verbs.h
+++ b/libibverbs/verbs.h
@@ -2243,6 +2243,16 @@ struct ibv_pd *ibv_import_pd(struct ibv_context *context,
void ibv_unimport_pd(struct ibv_pd *pd);
/**
+ * ibv_import_mr - Import a memory region
+ */
+struct ibv_mr *ibv_import_mr(struct ibv_pd *pd, uint32_t mr_handle);
+
+/**
+ * ibv_unimport_mr - Unimport a memory region
+ */
+void ibv_unimport_mr(struct ibv_mr *mr);
+
+/**
* ibv_get_async_event - Get next async event
* @event: Pointer to use to return async event
*
--
1.8.3.1
next prev parent reply other threads:[~2020-06-17 7:46 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-17 7:45 [PATCH rdma-core 00/13] verbs: Introduce import verbs for device, PD, MR Yishai Hadas
2020-06-17 7:45 ` [PATCH rdma-core 01/13] Update kernel headers Yishai Hadas
2020-06-17 7:45 ` [PATCH rdma-core 02/13] verbs: Close async_fd only when it was previously created Yishai Hadas
2020-06-17 7:45 ` [PATCH rdma-core 03/13] verbs: Introduce ibv_import_device() verb Yishai Hadas
2020-06-19 12:29 ` Jason Gunthorpe
2020-06-21 7:01 ` Yishai Hadas
2020-06-22 12:52 ` Jason Gunthorpe
2020-06-23 13:06 ` Yishai Hadas
2020-06-17 7:45 ` [PATCH rdma-core 04/13] verbs: Handle async FD on an imported device Yishai Hadas
2020-06-19 12:33 ` Jason Gunthorpe
2020-06-21 9:08 ` Yishai Hadas
2020-06-23 17:34 ` Jason Gunthorpe
2020-06-24 7:22 ` Yishai Hadas
2020-06-17 7:45 ` [PATCH rdma-core 05/13] mlx5: Refactor mlx5_alloc_context() Yishai Hadas
2020-06-17 7:45 ` [PATCH rdma-core 06/13] mlx5: Implement the import device functionality Yishai Hadas
2020-06-17 7:45 ` [PATCH rdma-core 07/13] verbs: Introduce ibv_import/unimport_pd() verbs Yishai Hadas
2020-06-19 12:48 ` Jason Gunthorpe
2020-06-21 8:30 ` Yishai Hadas
2020-06-17 7:45 ` [PATCH rdma-core 08/13] mlx5: Implement the import/unimport PD verbs Yishai Hadas
2020-06-17 7:45 ` Yishai Hadas [this message]
2020-06-17 7:45 ` [PATCH rdma-core 10/13] mlx5: Implement the import/unimport MR verbs Yishai Hadas
2020-06-19 12:50 ` Jason Gunthorpe
2020-06-21 8:44 ` Yishai Hadas
2020-06-23 17:33 ` Jason Gunthorpe
2020-06-24 7:20 ` Yishai Hadas
2020-07-01 12:28 ` Yishai Hadas
2020-07-02 17:42 ` Jason Gunthorpe
2020-06-17 7:45 ` [PATCH rdma-core 11/13] pyverbs: Support verbs import APIs Yishai Hadas
2020-06-17 7:45 ` [PATCH rdma-core 12/13] Documentation: Add usage example for verbs import Yishai Hadas
2020-06-17 7:45 ` [PATCH rdma-core 13/13] tests: Add a shared PD Pyverbs test Yishai Hadas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1592379956-7043-10-git-send-email-yishaih@mellanox.com \
--to=yishaih@mellanox.com \
--cc=jgg@mellanox.com \
--cc=linux-rdma@vger.kernel.org \
--cc=maorg@mellanox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).