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]

 



On Sun, Mar 11, 2018 at 06:46:47PM +0200, Matan Barak wrote:
> On Fri, Mar 9, 2018 at 2:59 PM, Ruhl, Michael J
> <michael.j.ruhl@xxxxxxxxx> wrote:
> >> -----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.
> >
>
> Yep, this is correct.
> I generally try to expose symbols only if they have an actual using
> module, but since this is a basic infrastructure, maybe we could add
> this code now.
>
> What do you think?

Please continue to do so, exposure of extra symbols increases vmlinux size.

Thanks

Attachment: signature.asc
Description: PGP signature


[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