mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 06:34:12 +08:00
net/mlx5: E-switch, remove special uplink ingress ACL handling
As both uplinks set the same metadata there is no need to merge the ACL handling of both into a single one. Signed-off-by: Mark Bloch <mbloch@nvidia.com> Reviewed-by: Maor Gottlieb <maorg@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
0b0ea3c5b1
commit
82e86a6c71
@ -2378,60 +2378,6 @@ void esw_offloads_unload_rep(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
mlx5_esw_offloads_devlink_port_unregister(esw, vport_num);
|
||||
}
|
||||
|
||||
static int esw_set_uplink_slave_ingress_root(struct mlx5_core_dev *master,
|
||||
struct mlx5_core_dev *slave)
|
||||
{
|
||||
u32 in[MLX5_ST_SZ_DW(set_flow_table_root_in)] = {};
|
||||
u32 out[MLX5_ST_SZ_DW(set_flow_table_root_out)] = {};
|
||||
struct mlx5_eswitch *esw;
|
||||
struct mlx5_flow_root_namespace *root;
|
||||
struct mlx5_flow_namespace *ns;
|
||||
struct mlx5_vport *vport;
|
||||
int err;
|
||||
|
||||
MLX5_SET(set_flow_table_root_in, in, opcode,
|
||||
MLX5_CMD_OP_SET_FLOW_TABLE_ROOT);
|
||||
MLX5_SET(set_flow_table_root_in, in, table_type, FS_FT_ESW_INGRESS_ACL);
|
||||
MLX5_SET(set_flow_table_root_in, in, other_vport, 1);
|
||||
MLX5_SET(set_flow_table_root_in, in, vport_number, MLX5_VPORT_UPLINK);
|
||||
|
||||
if (master) {
|
||||
esw = master->priv.eswitch;
|
||||
vport = mlx5_eswitch_get_vport(esw, MLX5_VPORT_UPLINK);
|
||||
MLX5_SET(set_flow_table_root_in, in, table_of_other_vport, 1);
|
||||
MLX5_SET(set_flow_table_root_in, in, table_vport_number,
|
||||
MLX5_VPORT_UPLINK);
|
||||
|
||||
ns = mlx5_get_flow_vport_acl_namespace(master,
|
||||
MLX5_FLOW_NAMESPACE_ESW_INGRESS,
|
||||
vport->index);
|
||||
root = find_root(&ns->node);
|
||||
mutex_lock(&root->chain_lock);
|
||||
|
||||
MLX5_SET(set_flow_table_root_in, in,
|
||||
table_eswitch_owner_vhca_id_valid, 1);
|
||||
MLX5_SET(set_flow_table_root_in, in,
|
||||
table_eswitch_owner_vhca_id,
|
||||
MLX5_CAP_GEN(master, vhca_id));
|
||||
MLX5_SET(set_flow_table_root_in, in, table_id,
|
||||
root->root_ft->id);
|
||||
} else {
|
||||
esw = slave->priv.eswitch;
|
||||
vport = mlx5_eswitch_get_vport(esw, MLX5_VPORT_UPLINK);
|
||||
ns = mlx5_get_flow_vport_acl_namespace(slave,
|
||||
MLX5_FLOW_NAMESPACE_ESW_INGRESS,
|
||||
vport->index);
|
||||
root = find_root(&ns->node);
|
||||
mutex_lock(&root->chain_lock);
|
||||
MLX5_SET(set_flow_table_root_in, in, table_id, root->root_ft->id);
|
||||
}
|
||||
|
||||
err = mlx5_cmd_exec(slave, in, sizeof(in), out, sizeof(out));
|
||||
mutex_unlock(&root->chain_lock);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int esw_set_slave_root_fdb(struct mlx5_core_dev *master,
|
||||
struct mlx5_core_dev *slave)
|
||||
{
|
||||
@ -2613,15 +2559,10 @@ int mlx5_eswitch_offloads_config_single_fdb(struct mlx5_eswitch *master_esw,
|
||||
{
|
||||
int err;
|
||||
|
||||
err = esw_set_uplink_slave_ingress_root(master_esw->dev,
|
||||
slave_esw->dev);
|
||||
if (err)
|
||||
return -EINVAL;
|
||||
|
||||
err = esw_set_slave_root_fdb(master_esw->dev,
|
||||
slave_esw->dev);
|
||||
if (err)
|
||||
goto err_fdb;
|
||||
return err;
|
||||
|
||||
err = esw_set_master_egress_rule(master_esw->dev,
|
||||
slave_esw->dev);
|
||||
@ -2633,9 +2574,6 @@ int mlx5_eswitch_offloads_config_single_fdb(struct mlx5_eswitch *master_esw,
|
||||
err_acl:
|
||||
esw_set_slave_root_fdb(NULL, slave_esw->dev);
|
||||
|
||||
err_fdb:
|
||||
esw_set_uplink_slave_ingress_root(NULL, slave_esw->dev);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -2644,7 +2582,6 @@ void mlx5_eswitch_offloads_destroy_single_fdb(struct mlx5_eswitch *master_esw,
|
||||
{
|
||||
esw_unset_master_egress_rule(master_esw->dev);
|
||||
esw_set_slave_root_fdb(NULL, slave_esw->dev);
|
||||
esw_set_uplink_slave_ingress_root(NULL, slave_esw->dev);
|
||||
}
|
||||
|
||||
#define ESW_OFFLOADS_DEVCOM_PAIR (0)
|
||||
|
Loading…
Reference in New Issue
Block a user