]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
IB/uverbs: Expose parsing tree of all common objects to providers
authorMatan Barak <matanb@mellanox.com>
Mon, 19 Mar 2018 13:02:37 +0000 (15:02 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 19 Mar 2018 20:45:17 +0000 (14:45 -0600)
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@mellanox.com>
Signed-off-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/uverbs.h
drivers/infiniband/core/uverbs_std_types.c
include/rdma/uverbs_std_types.h

index 0551e724c43125975fbed275dfc2486070b9d668..340fc23dc3155f3e4d2ba8dbf95a99507b87c1ef 100644 (file)
@@ -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>
 
 #define UVERBS_MODULE_NAME ib_uverbs
 #include <rdma/uverbs_named_ioctl.h>
@@ -250,6 +251,20 @@ struct ib_uverbs_flow_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);
+
 #define IB_UVERBS_DECLARE_CMD(name)                                    \
        ssize_t ib_uverbs_##name(struct ib_uverbs_file *file,           \
                                 struct ib_device *ib_dev,              \
index 0a2d8532de212017f1994e732d8714be41531255..9d4a0bc904dd26cfaaad25c7aaf8666fcdf133b9 100644 (file)
@@ -453,17 +453,23 @@ DECLARE_UVERBS_NAMED_OBJECT(UVERBS_OBJECT_PD,
 
 DECLARE_UVERBS_NAMED_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));
+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));
+
+const struct uverbs_object_tree_def *uverbs_default_get_objects(void)
+{
+       return &uverbs_default_objects;
+}
+EXPORT_SYMBOL_GPL(uverbs_default_get_objects);
index 45ee7d1bfa321b7db69bf7d6db1c0573d82d9827..9d56cdb84655f642f31bcfb58eea56f813ad9f8f 100644 (file)
 #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_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)
 {