RE: [PATCH rdma-next 11/12] IB/uverbs: Expose parsing tree of all common objects to providers

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

 



> -----Original Message-----
> From: linux-rdma-owner@xxxxxxxxxxxxxxx [mailto:linux-rdma-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Leon Romanovsky
> Sent: Thursday, March 8, 2018 12:20 PM
> To: Doug Ledford <dledford@xxxxxxxxxx>; Jason Gunthorpe
> <jgg@xxxxxxxxxxxx>
> Cc: Leon Romanovsky <leonro@xxxxxxxxxxxx>; RDMA mailing list <linux-
> rdma@xxxxxxxxxxxxxxx>; Aviad Yehezkel <aviadye@xxxxxxxxxxxx>; Boris
> Pismenny <borisp@xxxxxxxxxxxx>; Matan Barak <matanb@xxxxxxxxxxxx>;
> Yishai Hadas <yishaih@xxxxxxxxxxxx>
> Subject: [PATCH rdma-next 11/12] IB/uverbs: Expose parsing tree of all
> common objects to providers
> 
> From: Matan Barak <matanb@xxxxxxxxxxxx>
> 
> The ioctl() based uverbs is based on merging feature trees. This teaches
> the generic parser how to parse methods according to the provider's
> support. In order to support merging with the common objects, exporting
> the common-object-tree to the provider drivers.
> 
> Reviewed-by: Yishai Hadas <yishaih@xxxxxxxxxxxx>
> Signed-off-by: Matan Barak <matanb@xxxxxxxxxxxx>
> Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx>
> ---
>  drivers/infiniband/core/uverbs.h           | 16 +++++++++++++
>  drivers/infiniband/core/uverbs_std_types.c | 36 +++++++++++++++++------
> -------
>  include/rdma/uverbs_std_types.h            | 24 ++------------------
>  3 files changed, 39 insertions(+), 37 deletions(-)
> 
> diff --git a/drivers/infiniband/core/uverbs.h
> b/drivers/infiniband/core/uverbs.h
> index 43e6b2a40741..3a0dfce46411 100644
> --- a/drivers/infiniband/core/uverbs.h
> +++ b/drivers/infiniband/core/uverbs.h
> @@ -46,6 +46,7 @@
>  #include <rdma/ib_verbs.h>
>  #include <rdma/ib_umem.h>
>  #include <rdma/ib_user_verbs.h>
> +#include <rdma/uverbs_std_types.h>
> 
>  static inline void
>  ib_uverbs_init_udata(struct ib_udata *udata,
> @@ -261,6 +262,21 @@ int ib_uverbs_kern_spec_to_ib_spec_filter(enum
> ib_flow_spec_type type,
>  					  size_t kern_filter_sz,
>  					  union ib_flow_spec *ib_spec);
> 
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_DEVICE);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_PD);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_MR);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_COMP_CHANNEL);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_CQ);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_QP);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_AH);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_MW);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_SRQ);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_FLOW);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_WQ);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_RWQ_IND_TBL);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_XRCD);
> +extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_FLOW_ACTION);
> +
>  #define IB_UVERBS_DECLARE_CMD(name)
> 	\
>  	ssize_t ib_uverbs_##name(struct ib_uverbs_file *file,		\
>  				 struct ib_device *ib_dev,              \
> diff --git a/drivers/infiniband/core/uverbs_std_types.c
> b/drivers/infiniband/core/uverbs_std_types.c
> index 50cd7ed32c4e..80baaea1e114 100644
> --- a/drivers/infiniband/core/uverbs_std_types.c
> +++ b/drivers/infiniband/core/uverbs_std_types.c
> @@ -794,18 +794,24 @@ DECLARE_COMMON_OBJECT(UVERBS_OBJECT_PD,
> 
>  DECLARE_COMMON_OBJECT(UVERBS_OBJECT_DEVICE, NULL);
> 
> -DECLARE_UVERBS_OBJECT_TREE(uverbs_default_objects,
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_DEVICE),
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_PD),
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_MR),
> -
> &UVERBS_OBJECT(UVERBS_OBJECT_COMP_CHANNEL),
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_CQ),
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_QP),
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_AH),
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_MW),
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_SRQ),
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_FLOW),
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_WQ),
> -
> &UVERBS_OBJECT(UVERBS_OBJECT_RWQ_IND_TBL),
> -			   &UVERBS_OBJECT(UVERBS_OBJECT_XRCD),
> -
> &UVERBS_OBJECT(UVERBS_OBJECT_FLOW_ACTION));
> +static DECLARE_UVERBS_OBJECT_TREE(uverbs_default_objects,
> +
> &UVERBS_OBJECT(UVERBS_OBJECT_DEVICE),
> +				  &UVERBS_OBJECT(UVERBS_OBJECT_PD),
> +				  &UVERBS_OBJECT(UVERBS_OBJECT_MR),
> +
> &UVERBS_OBJECT(UVERBS_OBJECT_COMP_CHANNEL),
> +				  &UVERBS_OBJECT(UVERBS_OBJECT_CQ),
> +				  &UVERBS_OBJECT(UVERBS_OBJECT_QP),
> +				  &UVERBS_OBJECT(UVERBS_OBJECT_AH),
> +				  &UVERBS_OBJECT(UVERBS_OBJECT_MW),
> +				  &UVERBS_OBJECT(UVERBS_OBJECT_SRQ),
> +				  &UVERBS_OBJECT(UVERBS_OBJECT_FLOW),
> +				  &UVERBS_OBJECT(UVERBS_OBJECT_WQ),
> +
> &UVERBS_OBJECT(UVERBS_OBJECT_RWQ_IND_TBL),
> +				  &UVERBS_OBJECT(UVERBS_OBJECT_XRCD),
> +
> &UVERBS_OBJECT(UVERBS_OBJECT_FLOW_ACTION));
> +
> +const struct uverbs_object_tree_def *uverbs_default_get_objects(void)
> +{
> +	return &uverbs_default_objects;
> +}
> +EXPORT_SYMBOL_GPL(uverbs_default_get_objects);

I found that in order to use the:

UVERBS_TYPE_ALLOC_IDR()

and

UVERBS_TYPE_ALLOC_FDR()

ALLOC types, I also needed to export (at a minimum):

EXPORT_SYMBOL(uverbs_idr_class);
EXPORT_SYMBOL(uverbs_fd_class);
EXPORT_SYMBOL(uverbs_close_fd);

If this is going to be "enabled", these symbols should be considered as well.

Thanks,

Mike

> diff --git a/include/rdma/uverbs_std_types.h
> b/include/rdma/uverbs_std_types.h
> index e93bd7e1f1a0..9d56cdb84655 100644
> --- a/include/rdma/uverbs_std_types.h
> +++ b/include/rdma/uverbs_std_types.h
> @@ -37,30 +37,10 @@
>  #include <rdma/uverbs_ioctl.h>
>  #include <rdma/ib_user_ioctl_verbs.h>
> 
> -#if IS_ENABLED(CONFIG_INFINIBAND_USER_ACCESS)
> -
>  #define UVERBS_OBJECT(id)	uverbs_object_##id
> 
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_DEVICE);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_PD);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_MR);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_COMP_CHANNEL);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_CQ);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_QP);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_AH);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_MW);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_SRQ);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_FLOW);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_WQ);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_RWQ_IND_TBL);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_XRCD);
> -extern const struct uverbs_object_def
> UVERBS_OBJECT(UVERBS_OBJECT_FLOW_ACTION);
> -
> -extern const struct uverbs_object_tree_def uverbs_default_objects;
> -static inline const struct uverbs_object_tree_def
> *uverbs_default_get_objects(void)
> -{
> -	return &uverbs_default_objects;
> -}
> +#if IS_ENABLED(CONFIG_INFINIBAND_USER_ACCESS)
> +const struct uverbs_object_tree_def *uverbs_default_get_objects(void);
>  #else
>  static inline const struct uverbs_object_tree_def
> *uverbs_default_get_objects(void)
>  {
> --
> 2.16.2
> 
> --
> 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
--
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