From: Shamir Rabinovitch <shamir.rabinovitch@xxxxxxxxxx> 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@xxxxxxxxxx> Signed-off-by: Shamir Rabinovitch <srabinov7@xxxxxxxxx> Signed-off-by: Yuval Shaia <yuval.shaia@xxxxxxxxxx> --- 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