diff mbox

[4/9] RDMA/uverbs: Simplify method definition macros

Message ID fff2bd0b-f09f-a71b-bc0b-ae0cfaecde34@dev.mellanox.co.il (mailing list archive)
State RFC
Headers show

Commit Message

Yishai Hadas July 2, 2018, 11:34 a.m. UTC
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>
> ---  
> -#define DECLARE_UVERBS_NAMED_METHOD_NO_OVERRIDE(id, handler, ...)	\
> -	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.


index cbb727f..1d06e6b 100644
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Jason Gunthorpe July 3, 2018, 8:31 p.m. UTC | #1
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
diff mbox

Patch

--- 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