forked from Minki/linux
RDMA/mlx5: Fail early if user tries to create flows on IB representors
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>
This commit is contained in:
parent
f94e02ddfd
commit
a1462351b5
@ -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),
|
||||
{},
|
||||
|
@ -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__)
|
||||
|
||||
/*
|
||||
* =======================================
|
||||
|
Loading…
Reference in New Issue
Block a user