Commit eca8cc38 authored by Bodong Wang's avatar Bodong Wang Committed by Saeed Mahameed

net/mlx5: E-Switch, Refactor offloads flow steering init/cleanup

E-switch offloads mode initialize/cleanup multiple steering related
entities (flow table/group). Refactor these operations to internal
helper functions for better block design.

This patch doesn't change any functionality.
Signed-off-by: default avatarBodong Wang <bodong@mellanox.com>
Reviewed-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent cbc44e76
...@@ -1404,7 +1404,7 @@ static void esw_offloads_devcom_cleanup(struct mlx5_eswitch *esw) ...@@ -1404,7 +1404,7 @@ static void esw_offloads_devcom_cleanup(struct mlx5_eswitch *esw)
mlx5_devcom_unregister_component(devcom, MLX5_DEVCOM_ESW_OFFLOADS); mlx5_devcom_unregister_component(devcom, MLX5_DEVCOM_ESW_OFFLOADS);
} }
int esw_offloads_init(struct mlx5_eswitch *esw, int nvports) static int esw_offloads_steering_init(struct mlx5_eswitch *esw, int nvports)
{ {
int err; int err;
...@@ -1422,16 +1422,8 @@ int esw_offloads_init(struct mlx5_eswitch *esw, int nvports) ...@@ -1422,16 +1422,8 @@ int esw_offloads_init(struct mlx5_eswitch *esw, int nvports)
if (err) if (err)
goto create_fg_err; goto create_fg_err;
err = esw_offloads_load_reps(esw, nvports);
if (err)
goto err_reps;
esw_offloads_devcom_init(esw);
return 0; return 0;
err_reps:
esw_destroy_vport_rx_group(esw);
create_fg_err: create_fg_err:
esw_destroy_offloads_table(esw); esw_destroy_offloads_table(esw);
...@@ -1441,6 +1433,35 @@ int esw_offloads_init(struct mlx5_eswitch *esw, int nvports) ...@@ -1441,6 +1433,35 @@ int esw_offloads_init(struct mlx5_eswitch *esw, int nvports)
return err; return err;
} }
static void esw_offloads_steering_cleanup(struct mlx5_eswitch *esw)
{
esw_destroy_vport_rx_group(esw);
esw_destroy_offloads_table(esw);
esw_destroy_offloads_fdb_tables(esw);
}
int esw_offloads_init(struct mlx5_eswitch *esw, int nvports)
{
int err;
mutex_init(&esw->fdb_table.offloads.fdb_prio_lock);
err = esw_offloads_steering_init(esw, nvports);
if (err)
return err;
err = esw_offloads_load_reps(esw, nvports);
if (err)
goto err_reps;
esw_offloads_devcom_init(esw);
return 0;
err_reps:
esw_offloads_steering_cleanup(esw);
return err;
}
static int esw_offloads_stop(struct mlx5_eswitch *esw, static int esw_offloads_stop(struct mlx5_eswitch *esw,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
{ {
...@@ -1464,9 +1485,7 @@ void esw_offloads_cleanup(struct mlx5_eswitch *esw, int nvports) ...@@ -1464,9 +1485,7 @@ void esw_offloads_cleanup(struct mlx5_eswitch *esw, int nvports)
{ {
esw_offloads_devcom_cleanup(esw); esw_offloads_devcom_cleanup(esw);
esw_offloads_unload_reps(esw, nvports); esw_offloads_unload_reps(esw, nvports);
esw_destroy_vport_rx_group(esw); esw_offloads_steering_cleanup(esw);
esw_destroy_offloads_table(esw);
esw_destroy_offloads_fdb_tables(esw);
} }
static int esw_mode_from_devlink(u16 mode, u16 *mlx5_mode) static int esw_mode_from_devlink(u16 mode, u16 *mlx5_mode)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment