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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Jul 01, 2018 at 05:38:26PM +0300, Yishai Hadas wrote:
> On 6/26/2018 1:12 AM, Jason Gunthorpe wrote:
> >From: Jason Gunthorpe <jgg@xxxxxxxxxxxx>
> >
> >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@xxxxxxxxxxxx>
> >  .../core/uverbs_std_types_counters.c          |  7 +-
> >  drivers/infiniband/core/uverbs_std_types_cq.c |  4 +-
> >  drivers/infiniband/core/uverbs_std_types_dm.c |  5 +-
> >  .../core/uverbs_std_types_flow_action.c       |  7 +-
> >  drivers/infiniband/core/uverbs_std_types_mr.c |  2 +-
> >  drivers/infiniband/hw/mlx5/devx.c             | 18 ++---
> >  include/rdma/uverbs_ioctl.h                   | 18 -----
> >  include/rdma/uverbs_named_ioctl.h             | 73 ++++++++++---------
> >  8 files changed, 60 insertions(+), 74 deletions(-)
> >
> >diff --git a/include/rdma/uverbs_named_ioctl.h b/include/rdma/uverbs_named_ioctl.h
> >index 228421f2a427b6..06eac48ec4f233 100644
> >+++ b/include/rdma/uverbs_named_ioctl.h
> >@@ -45,14 +45,32 @@
> >  #define UVERBS_HANDLER(id)	_UVERBS_NAME(UVERBS_MODULE_NAME, _handler_##id)
> >  #define UVERBS_OBJECT(id)	_UVERBS_NAME(UVERBS_MOUDLE_NAME, _object_##id)
> >-#define DECLARE_UVERBS_NAMED_METHOD(id, ...)	\
> >-	DECLARE_UVERBS_METHOD(UVERBS_METHOD(id), id, UVERBS_HANDLER(id), ##__VA_ARGS__)
> >+#define UVERBS_METHOD_ATTRS(id)                                                \
> >+	_UVERBS_NAME(UVERBS_MODULE_NAME, _method_attrs_##id)
> >-#define DECLARE_UVERBS_NAMED_METHOD_WITH_HANDLER(id, handler, ...)	\
> >-	DECLARE_UVERBS_METHOD(UVERBS_METHOD(id), id, handler, ##__VA_ARGS__)
> >+#define DECLARE_UVERBS_NAMED_METHOD(_method_id, ...)                           \
> >+	static const struct uverbs_attr_def *const UVERBS_METHOD_ATTRS(        \
> >+		_method_id)[] = { __VA_ARGS__ };                               \
> >+	static const struct uverbs_method_def UVERBS_METHOD(_method_id) = {    \
> >+		.id = _method_id,                                              \
> >+		.handler = UVERBS_HANDLER(_method_id),                         \
> >+		.num_attrs = ARRAY_SIZE(UVERBS_METHOD_ATTRS(_method_id)),      \
> >+		.attrs = &UVERBS_METHOD_ATTRS(_method_id),                     \
> >+	}
> >-#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),                     \
> >+	}
> >  #define DECLARE_UVERBS_NAMED_OBJECT(id, ...)	\
> >  	DECLARE_UVERBS_OBJECT(UVERBS_OBJECT(id), id, ##__VA_ARGS__)
> >@@ -62,33 +80,22 @@
> >  #define _UVERBS_COMP_NAME(x, y, z) _UVERBS_NAME(_UVERBS_NAME(x, y), z)
> >-#define UVERBS_NO_OVERRIDE	NULL
> >-
> >-/* This declares a parsing tree with one object and one method. This is usually
> >- * used for merging driver attributes to the common attributes. The driver has
> >- * a chance to override the handler and type attrs of the original object.
> >- * The __VA_ARGS__ just contains a list of attributes.
> >- */
> >-#define ADD_UVERBS_ATTRIBUTES(_name, _object, _method, _type_attrs, _handler, ...) \
> >-static DECLARE_UVERBS_METHOD(_UVERBS_COMP_NAME(UVERBS_MODULE_NAME,	     \
> >-					       _method_, _name),	     \
> >-			     _method, _handler, ##__VA_ARGS__);		     \
> >-									     \
> >-static DECLARE_UVERBS_OBJECT(_UVERBS_COMP_NAME(UVERBS_MODULE_NAME,	     \
> >-					       _object_, _name),	     \
> >-			     _object, _type_attrs,			     \
> >-			     &_UVERBS_COMP_NAME(UVERBS_MODULE_NAME,	     \
> >-					       _method_, _name));	     \
> >-									     \
> >-static DECLARE_UVERBS_OBJECT_TREE(_name,				     \
> >-				  &_UVERBS_COMP_NAME(UVERBS_MODULE_NAME,     \
> >-						     _object_, _name))
> >-
> 
> This patch removes the above macro which enables drivers to add a method
> with given attributes to an existing object. We are in progress in other
> series to use this functionality, let's please don't delete it without
> supplying an alternative macro for that.

Yes.. The patch below looked like the right direction, lets review it
as part of a series that introduces a user please.

Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux