[PATCH v1 08/24] IB/verbs: Prototype of HW object clone callback

Yuval Shaia
2019-08-21T14:23:54Z

From: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>

Define prototype for clone callback. The clone callback is used
by the driver layer to supply the uverbs a way to clone IB HW
object driver data to rdma-core user space provider. The clone
callback is used when new IB HW object is created and every time
it is imported to some ib_ucontext. Drivers that wish to enable
share of some IB HW object (ib_pd, ib_mr, etc..) must supply valid
clone callback for that type.

Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@oracle.com>
Signed-off-by: Shamir Rabinovitch <srabinov7@gmail.com>
Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com>
---
include/rdma/ib_verbs.h | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)

diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 7e69866fc419..542b3cb2d943 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -2265,6 +2265,18 @@ struct iw_cm_conn_param;

#define DECLARE_RDMA_OBJ_SIZE(ib_struct) size_t size_##ib_struct

+/*
+ * Prototype for IB HW object clone callback
+ *
+ * Define prototype for clone callback. The clone callback is used
+ * by the driver layer to supply the uverbs a way to clone IB HW
+ * object driver data to rdma-core user space provider. The clone
+ * callback is used when new IB HW object is created and every time
+ * it is imported to some ib_ucontext.
+ */
+#define clone_callback(ib_type) \
+ int (*clone_##ib_type)(struct ib_udata *udata, struct ib_type *obj)
+
/**
* struct ib_device_ops - InfiniBand device operations
* This structure defines all the InfiniBand device operations, providers will
@@ -2575,6 +2587,9 @@ struct ib_device_ops {
*/
int (*counter_update_stats)(struct rdma_counter *counter);

+ /* Object sharing callbacks */
+ clone_callback(ib_pd);
+
DECLARE_RDMA_OBJ_SIZE(ib_ah);
DECLARE_RDMA_OBJ_SIZE(ib_cq);
DECLARE_RDMA_OBJ_SIZE(ib_pd);
@@ -2582,6 +2597,17 @@ struct ib_device_ops {
DECLARE_RDMA_OBJ_SIZE(ib_ucontext);
};

+/* Implementation of trivial clone callback */
+#define trivial_clone_callback(ib_type) \
+static inline int trivial_clone_##ib_type(struct ib_udata *udata, \
+ struct ib_type *obj) \
+{ \
+ return 0; \
+}
+
+/* Shared IB HW object support */
+trivial_clone_callback(ib_pd);
+
struct ib_core_device {
/* device must be the first element in structure until,
* union of ib_core_device and device exists in ib_device.
--
2.20.1