Message ID | fff2bd0b-f09f-a71b-bc0b-ae0cfaecde34@dev.mellanox.co.il (mailing list archive) |
---|---|
State | RFC |
Headers | show |
On Mon, Jul 02, 2018 at 02:34:30PM +0300, Yishai Hadas wrote: > On 6/26/2018 1:12 AM, Jason Gunthorpe wrote: > >From: Jason Gunthorpe <jgg@mellanox.com> > > > >Instead of the large set of indirecting macros, define the few needed > >macros to directly instantiate the struct uverbs_method_def and associated > >attributes list. > > > >This is small amount of code duplication but the readability is far > >better. > > > >Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> > >- DECLARE_UVERBS_METHOD(UVERBS_METHOD(id), id, NULL, ##__VA_ARGS__) > >+/* Create a standard destroy method using the default handler. The handle_attr > >+ * argument must be the attribute specifying the handle to destroy, the > >+ * default handler does not support any other attributes. > >+ */ > >+#define DECLARE_UVERBS_NAMED_METHOD_DESTROY(_method_id, _handle_attr) \ > >+ static const struct uverbs_attr_def *const UVERBS_METHOD_ATTRS( \ > >+ _method_id)[] = { _handle_attr }; \ > >+ static const struct uverbs_method_def UVERBS_METHOD(_method_id) = { \ > >+ .id = _method_id, \ > >+ .handler = uverbs_destroy_def_handler, \ > >+ .num_attrs = ARRAY_SIZE(UVERBS_METHOD_ATTRS(_method_id)), \ > >+ .attrs = &UVERBS_METHOD_ATTRS(_method_id), \ > >+ } > > To enable drivers using this new standard macro, I would add the below code > to this patch. Something like this should be sent along with hunks to make all destroy call sites (eg in devx.c) use this new macro. Jason -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
--- a/drivers/infiniband/core/uverbs.h +++ b/drivers/infiniband/core/uverbs.h @@ -247,9 +247,6 @@ void ib_uverbs_detach_umcast(struct ib_qp *qp, void create_udata(struct uverbs_attr_bundle *ctx, struct ib_udata *udata); long ib_uverbs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); -int uverbs_destroy_def_handler(struct ib_device *ib_dev, - struct ib_uverbs_file *file, - struct uverbs_attr_bundle *attrs); struct ib_uverbs_flow_spec { union { diff --git a/drivers/infiniband/core/uverbs_std_types.c b/drivers/infiniband/core/uverbs_std_types.c index 912519f..58f2197 100644 --- a/drivers/infiniband/core/uverbs_std_types.c +++ b/drivers/infiniband/core/uverbs_std_types.c @@ -215,6 +215,7 @@ int uverbs_destroy_def_handler(struct ib_device *ib_dev, { return 0; } +EXPORT_SYMBOL_GPL(uverbs_destroy_def_handler); void create_udata(struct uverbs_attr_bundle *ctx, struct ib_udata *udata) { diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 031d121..01b9d5a 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -4160,4 +4160,7 @@ static inline __be16 ib_lid_be16(u32 lid) struct ib_ucontext *ib_uverbs_get_ucontext(struct ib_uverbs_file *ufile); +int uverbs_destroy_def_handler(struct ib_device *ib_dev, + struct ib_uverbs_file *file, + struct uverbs_attr_bundle *attrs); -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in