]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commitdiff
RDMA/mlx5: Fail early if user tries to create flows on IB representors
authorLeon Romanovsky <leonro@mellanox.com>
Mon, 10 Dec 2018 09:19:49 +0000 (11:19 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 11 Dec 2018 21:38:16 +0000 (14:38 -0700)
IB representors don't support creation of RAW ethernet QP flows.  Disable
them by reusing existing RDMA/core support macros.  We do it for both
creation and matcher because latter is not usable if no flow creation is
available.

Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/flow.c
include/rdma/uverbs_ioctl.h

index b73756bd38bd14ab623dc2728c5c789632310572..b840d4eeba849cf0098f4fc9f53386ccca820c99 100644 (file)
@@ -134,8 +134,6 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_CREATE_FLOW)(
                        return -EINVAL;
                flow_act.action |= MLX5_FLOW_CONTEXT_ACTION_COUNT;
        }
-       if (dev->rep)
-               return -ENOTSUPP;
 
        if (dest_type == MLX5_FLOW_DESTINATION_TYPE_TIR &&
            fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_EGRESS)
@@ -623,9 +621,19 @@ DECLARE_UVERBS_NAMED_OBJECT(MLX5_IB_OBJECT_FLOW_MATCHER,
                            &UVERBS_METHOD(MLX5_IB_METHOD_FLOW_MATCHER_CREATE),
                            &UVERBS_METHOD(MLX5_IB_METHOD_FLOW_MATCHER_DESTROY));
 
+static bool flow_is_supported(struct ib_device *device)
+{
+       return !to_mdev(device)->rep;
+}
+
 const struct uapi_definition mlx5_ib_flow_defs[] = {
-       UAPI_DEF_CHAIN_OBJ_TREE_NAMED(MLX5_IB_OBJECT_FLOW_MATCHER),
-       UAPI_DEF_CHAIN_OBJ_TREE(UVERBS_OBJECT_FLOW, &mlx5_ib_fs),
+       UAPI_DEF_CHAIN_OBJ_TREE_NAMED(
+               MLX5_IB_OBJECT_FLOW_MATCHER,
+               UAPI_DEF_IS_OBJ_SUPPORTED(flow_is_supported)),
+       UAPI_DEF_CHAIN_OBJ_TREE(
+               UVERBS_OBJECT_FLOW,
+               &mlx5_ib_fs,
+               UAPI_DEF_IS_OBJ_SUPPORTED(flow_is_supported)),
        UAPI_DEF_CHAIN_OBJ_TREE(UVERBS_OBJECT_FLOW_ACTION,
                                &mlx5_ib_flow_actions),
        {},
index 2f56844fb7da750a73220d6904857a98ac367778..7f83265f629887b4c8ace9df63cf3bb190ae5932 100644 (file)
@@ -454,15 +454,16 @@ struct uapi_definition {
        }
 
 /* Temporary until the tree base description is replaced */
-#define UAPI_DEF_CHAIN_OBJ_TREE(_object_enum, _object_ptr)                     \
+#define UAPI_DEF_CHAIN_OBJ_TREE(_object_enum, _object_ptr, ...)                \
        {                                                                      \
                .kind = UAPI_DEF_CHAIN_OBJ_TREE,                               \
                .object_start = { .object_id = _object_enum },                 \
                .chain_obj_tree = _object_ptr,                                 \
-       }
-#define UAPI_DEF_CHAIN_OBJ_TREE_NAMED(_object_enum, ...)                       \
-       UAPI_DEF_CHAIN_OBJ_TREE(_object_enum, &UVERBS_OBJECT(_object_enum)),   \
+       },                                                                     \
                ##__VA_ARGS__
+#define UAPI_DEF_CHAIN_OBJ_TREE_NAMED(_object_enum, ...)                       \
+       UAPI_DEF_CHAIN_OBJ_TREE(_object_enum, &UVERBS_OBJECT(_object_enum),    \
+                               ##__VA_ARGS__)
 
 /*
  * =======================================