Message ID | 20190821142125.5706-9-yuval.shaia@oracle.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Shared PD and MR | expand |
On Wed, Aug 21, 2019 at 05:21:09PM +0300, Yuval Shaia wrote: > 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 > +++ 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) Don't like the idea of clone at all. If the userspace driver needs to learn information about a HW object it just imported, like some HW specific PDN, then the correct verb for that is QUERY not clone. And we already have a wide ranging infrastructure for drivers to add their own driver specific query interfaces. Jason
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.