mirror of https://gitee.com/openkylin/linux.git
RDMA/mlx5: Refactor flow action parsing to be more generic
Make the parsing of flow actions more generic so it could be used by mlx5 raw create flow. Signed-off-by: Mark Bloch <markb@mellanox.com> Reviewed-by: Yishai Hadas <yishaih@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
86e1d464a8
commit
2ea2620390
|
@ -2460,17 +2460,16 @@ static int check_mpls_supp_fields(u32 field_support, const __be32 *set_mask)
|
||||||
offsetof(typeof(filter), field) -\
|
offsetof(typeof(filter), field) -\
|
||||||
sizeof(filter.field))
|
sizeof(filter.field))
|
||||||
|
|
||||||
static int parse_flow_flow_action(const union ib_flow_spec *ib_spec,
|
int parse_flow_flow_action(struct mlx5_ib_flow_action *maction,
|
||||||
const struct ib_flow_attr *flow_attr,
|
bool is_egress,
|
||||||
struct mlx5_flow_act *action)
|
struct mlx5_flow_act *action)
|
||||||
{
|
{
|
||||||
struct mlx5_ib_flow_action *maction = to_mflow_act(ib_spec->action.act);
|
|
||||||
|
|
||||||
switch (maction->ib_action.type) {
|
switch (maction->ib_action.type) {
|
||||||
case IB_FLOW_ACTION_ESP:
|
case IB_FLOW_ACTION_ESP:
|
||||||
/* Currently only AES_GCM keymat is supported by the driver */
|
/* Currently only AES_GCM keymat is supported by the driver */
|
||||||
action->esp_id = (uintptr_t)maction->esp_aes_gcm.ctx;
|
action->esp_id = (uintptr_t)maction->esp_aes_gcm.ctx;
|
||||||
action->action |= flow_attr->flags & IB_FLOW_ATTR_FLAGS_EGRESS ?
|
action->action |= is_egress ?
|
||||||
MLX5_FLOW_CONTEXT_ACTION_ENCRYPT :
|
MLX5_FLOW_CONTEXT_ACTION_ENCRYPT :
|
||||||
MLX5_FLOW_CONTEXT_ACTION_DECRYPT;
|
MLX5_FLOW_CONTEXT_ACTION_DECRYPT;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2831,7 +2830,8 @@ static int parse_flow_attr(struct mlx5_core_dev *mdev, u32 *match_c,
|
||||||
action->action |= MLX5_FLOW_CONTEXT_ACTION_DROP;
|
action->action |= MLX5_FLOW_CONTEXT_ACTION_DROP;
|
||||||
break;
|
break;
|
||||||
case IB_FLOW_SPEC_ACTION_HANDLE:
|
case IB_FLOW_SPEC_ACTION_HANDLE:
|
||||||
ret = parse_flow_flow_action(ib_spec, flow_attr, action);
|
ret = parse_flow_flow_action(to_mflow_act(ib_spec->action.act),
|
||||||
|
flow_attr->flags & IB_FLOW_ATTR_FLAGS_EGRESS, action);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include <linux/mlx5/cq.h>
|
#include <linux/mlx5/cq.h>
|
||||||
#include <linux/mlx5/qp.h>
|
#include <linux/mlx5/qp.h>
|
||||||
#include <linux/mlx5/srq.h>
|
#include <linux/mlx5/srq.h>
|
||||||
|
#include <linux/mlx5/fs.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/mlx5/transobj.h>
|
#include <linux/mlx5/transobj.h>
|
||||||
#include <rdma/ib_user_verbs.h>
|
#include <rdma/ib_user_verbs.h>
|
||||||
|
@ -872,6 +873,9 @@ to_mcounters(struct ib_counters *ibcntrs)
|
||||||
return container_of(ibcntrs, struct mlx5_ib_mcounters, ibcntrs);
|
return container_of(ibcntrs, struct mlx5_ib_mcounters, ibcntrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int parse_flow_flow_action(struct mlx5_ib_flow_action *maction,
|
||||||
|
bool is_egress,
|
||||||
|
struct mlx5_flow_act *action);
|
||||||
struct mlx5_ib_dev {
|
struct mlx5_ib_dev {
|
||||||
struct ib_device ib_dev;
|
struct ib_device ib_dev;
|
||||||
const struct uverbs_object_tree_def *driver_trees[7];
|
const struct uverbs_object_tree_def *driver_trees[7];
|
||||||
|
|
Loading…
Reference in New Issue