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