net/mlx5: Reduce number of vport lookups passing vport pointer instead of index
During devlink port init/cleanup and register/unregister calls, there are many lookups of vport. Instead of passing vport_num as argument to functions, pass the vport struct pointer directly and avoid repeated lookups. Signed-off-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Shay Drory <shayd@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
committed by
Saeed Mahameed
parent
2c5f33f6b9
commit
2caa2a3911
@@ -54,18 +54,15 @@ static void mlx5_esw_offloads_pf_vf_devlink_port_attrs_set(struct mlx5_eswitch *
|
||||
}
|
||||
}
|
||||
|
||||
int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw,
|
||||
struct mlx5_vport *vport)
|
||||
{
|
||||
struct mlx5_devlink_port *dl_port;
|
||||
struct mlx5_vport *vport;
|
||||
u16 vport_num = vport->vport;
|
||||
|
||||
if (!mlx5_esw_devlink_port_supported(esw, vport_num))
|
||||
return 0;
|
||||
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport))
|
||||
return PTR_ERR(vport);
|
||||
|
||||
dl_port = kzalloc(sizeof(*dl_port), GFP_KERNEL);
|
||||
if (!dl_port)
|
||||
return -ENOMEM;
|
||||
@@ -77,12 +74,10 @@ int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw, u16 vpor
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mlx5_esw_offloads_pf_vf_devlink_port_cleanup(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
void mlx5_esw_offloads_pf_vf_devlink_port_cleanup(struct mlx5_eswitch *esw,
|
||||
struct mlx5_vport *vport)
|
||||
{
|
||||
struct mlx5_vport *vport;
|
||||
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport) || !vport->dl_port)
|
||||
if (!vport->dl_port)
|
||||
return;
|
||||
|
||||
kfree(vport->dl_port);
|
||||
@@ -113,30 +108,18 @@ static void mlx5_esw_offloads_sf_devlink_port_attrs_set(struct mlx5_eswitch *esw
|
||||
devlink_port_attrs_pci_sf_set(dl_port, controller, pfnum, sfnum, !!controller);
|
||||
}
|
||||
|
||||
int mlx5_esw_offloads_sf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
int mlx5_esw_offloads_sf_devlink_port_init(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
|
||||
struct mlx5_devlink_port *dl_port,
|
||||
u32 controller, u32 sfnum)
|
||||
{
|
||||
struct mlx5_vport *vport;
|
||||
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport))
|
||||
return PTR_ERR(vport);
|
||||
|
||||
mlx5_esw_offloads_sf_devlink_port_attrs_set(esw, &dl_port->dl_port, controller, sfnum);
|
||||
|
||||
vport->dl_port = dl_port;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mlx5_esw_offloads_sf_devlink_port_cleanup(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
void mlx5_esw_offloads_sf_devlink_port_cleanup(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
{
|
||||
struct mlx5_vport *vport;
|
||||
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport))
|
||||
return;
|
||||
|
||||
vport->dl_port = NULL;
|
||||
}
|
||||
|
||||
@@ -154,20 +137,16 @@ static const struct devlink_port_ops mlx5_esw_dl_sf_port_ops = {
|
||||
#endif
|
||||
};
|
||||
|
||||
int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
{
|
||||
struct mlx5_core_dev *dev = esw->dev;
|
||||
const struct devlink_port_ops *ops;
|
||||
struct mlx5_devlink_port *dl_port;
|
||||
u16 vport_num = vport->vport;
|
||||
unsigned int dl_port_index;
|
||||
struct mlx5_vport *vport;
|
||||
struct devlink *devlink;
|
||||
int err;
|
||||
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport))
|
||||
return PTR_ERR(vport);
|
||||
|
||||
dl_port = vport->dl_port;
|
||||
if (!dl_port)
|
||||
return 0;
|
||||
@@ -196,13 +175,11 @@ rate_err:
|
||||
return err;
|
||||
}
|
||||
|
||||
void mlx5_esw_offloads_devlink_port_unregister(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
void mlx5_esw_offloads_devlink_port_unregister(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
{
|
||||
struct mlx5_devlink_port *dl_port;
|
||||
struct mlx5_vport *vport;
|
||||
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport) || !vport->dl_port)
|
||||
if (!vport->dl_port)
|
||||
return;
|
||||
dl_port = vport->dl_port;
|
||||
|
||||
|
||||
@@ -882,16 +882,12 @@ static void esw_vport_cleanup(struct mlx5_eswitch *esw, struct mlx5_vport *vport
|
||||
esw_vport_cleanup_acl(esw, vport);
|
||||
}
|
||||
|
||||
int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
|
||||
enum mlx5_eswitch_vport_event enabled_events)
|
||||
{
|
||||
struct mlx5_vport *vport;
|
||||
u16 vport_num = vport->vport;
|
||||
int ret;
|
||||
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport))
|
||||
return PTR_ERR(vport);
|
||||
|
||||
mutex_lock(&esw->state_lock);
|
||||
WARN_ON(vport->enabled);
|
||||
|
||||
@@ -912,7 +908,7 @@ int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
(!vport_num && mlx5_core_is_ecpf(esw->dev)))
|
||||
vport->info.trusted = true;
|
||||
|
||||
if (!mlx5_esw_is_manager_vport(esw, vport->vport) &&
|
||||
if (!mlx5_esw_is_manager_vport(esw, vport_num) &&
|
||||
MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
|
||||
ret = mlx5_esw_vport_vhca_id_set(esw, vport_num);
|
||||
if (ret)
|
||||
@@ -939,15 +935,12 @@ err_vhca_mapping:
|
||||
return ret;
|
||||
}
|
||||
|
||||
void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
{
|
||||
struct mlx5_vport *vport;
|
||||
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport))
|
||||
return;
|
||||
u16 vport_num = vport->vport;
|
||||
|
||||
mutex_lock(&esw->state_lock);
|
||||
|
||||
if (!vport->enabled)
|
||||
goto done;
|
||||
|
||||
@@ -957,9 +950,9 @@ void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
|
||||
/* Disable events from this vport */
|
||||
if (MLX5_CAP_GEN(esw->dev, log_max_l2_table))
|
||||
arm_vport_context_events_cmd(esw->dev, vport->vport, 0);
|
||||
arm_vport_context_events_cmd(esw->dev, vport_num, 0);
|
||||
|
||||
if (!mlx5_esw_is_manager_vport(esw, vport->vport) &&
|
||||
if (!mlx5_esw_is_manager_vport(esw, vport_num) &&
|
||||
MLX5_CAP_GEN(esw->dev, vhca_resource_manager))
|
||||
mlx5_esw_vport_vhca_id_clear(esw, vport_num);
|
||||
|
||||
@@ -1068,82 +1061,104 @@ static void mlx5_eswitch_clear_ec_vf_vports_info(struct mlx5_eswitch *esw)
|
||||
}
|
||||
}
|
||||
|
||||
static int mlx5_eswitch_load_vport(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
static int mlx5_eswitch_load_vport(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
|
||||
enum mlx5_eswitch_vport_event enabled_events)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = mlx5_esw_vport_enable(esw, vport_num, enabled_events);
|
||||
err = mlx5_esw_vport_enable(esw, vport, enabled_events);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlx5_esw_offloads_load_rep(esw, vport_num);
|
||||
err = mlx5_esw_offloads_load_rep(esw, vport);
|
||||
if (err)
|
||||
goto err_rep;
|
||||
|
||||
return err;
|
||||
|
||||
err_rep:
|
||||
mlx5_esw_vport_disable(esw, vport_num);
|
||||
mlx5_esw_vport_disable(esw, vport);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void mlx5_eswitch_unload_vport(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
static void mlx5_eswitch_unload_vport(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
{
|
||||
mlx5_esw_offloads_unload_rep(esw, vport_num);
|
||||
mlx5_esw_vport_disable(esw, vport_num);
|
||||
mlx5_esw_offloads_unload_rep(esw, vport);
|
||||
mlx5_esw_vport_disable(esw, vport);
|
||||
}
|
||||
|
||||
static int mlx5_eswitch_load_pf_vf_vport(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
enum mlx5_eswitch_vport_event enabled_events)
|
||||
{
|
||||
struct mlx5_vport *vport;
|
||||
int err;
|
||||
|
||||
err = mlx5_esw_offloads_init_pf_vf_rep(esw, vport_num);
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport))
|
||||
return PTR_ERR(vport);
|
||||
|
||||
err = mlx5_esw_offloads_init_pf_vf_rep(esw, vport);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlx5_eswitch_load_vport(esw, vport_num, enabled_events);
|
||||
err = mlx5_eswitch_load_vport(esw, vport, enabled_events);
|
||||
if (err)
|
||||
goto err_load;
|
||||
return 0;
|
||||
|
||||
err_load:
|
||||
mlx5_esw_offloads_cleanup_pf_vf_rep(esw, vport_num);
|
||||
mlx5_esw_offloads_cleanup_pf_vf_rep(esw, vport);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void mlx5_eswitch_unload_pf_vf_vport(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
{
|
||||
mlx5_eswitch_unload_vport(esw, vport_num);
|
||||
mlx5_esw_offloads_cleanup_pf_vf_rep(esw, vport_num);
|
||||
struct mlx5_vport *vport;
|
||||
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport))
|
||||
return;
|
||||
|
||||
mlx5_eswitch_unload_vport(esw, vport);
|
||||
mlx5_esw_offloads_cleanup_pf_vf_rep(esw, vport);
|
||||
}
|
||||
|
||||
int mlx5_eswitch_load_sf_vport(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
enum mlx5_eswitch_vport_event enabled_events,
|
||||
struct mlx5_devlink_port *dl_port, u32 controller, u32 sfnum)
|
||||
{
|
||||
struct mlx5_vport *vport;
|
||||
int err;
|
||||
|
||||
err = mlx5_esw_offloads_init_sf_rep(esw, vport_num, dl_port, controller, sfnum);
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport))
|
||||
return PTR_ERR(vport);
|
||||
|
||||
err = mlx5_esw_offloads_init_sf_rep(esw, vport, dl_port, controller, sfnum);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlx5_eswitch_load_vport(esw, vport_num, enabled_events);
|
||||
err = mlx5_eswitch_load_vport(esw, vport, enabled_events);
|
||||
if (err)
|
||||
goto err_load;
|
||||
|
||||
return 0;
|
||||
|
||||
err_load:
|
||||
mlx5_esw_offloads_cleanup_sf_rep(esw, vport_num);
|
||||
mlx5_esw_offloads_cleanup_sf_rep(esw, vport);
|
||||
return err;
|
||||
}
|
||||
|
||||
void mlx5_eswitch_unload_sf_vport(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
{
|
||||
mlx5_eswitch_unload_vport(esw, vport_num);
|
||||
mlx5_esw_offloads_cleanup_sf_rep(esw, vport_num);
|
||||
struct mlx5_vport *vport;
|
||||
|
||||
vport = mlx5_eswitch_get_vport(esw, vport_num);
|
||||
if (IS_ERR(vport))
|
||||
return;
|
||||
|
||||
mlx5_eswitch_unload_vport(esw, vport);
|
||||
mlx5_esw_offloads_cleanup_sf_rep(esw, vport);
|
||||
}
|
||||
|
||||
void mlx5_eswitch_unload_vf_vports(struct mlx5_eswitch *esw, u16 num_vfs)
|
||||
|
||||
@@ -694,9 +694,9 @@ mlx5_eswitch_enable_pf_vf_vports(struct mlx5_eswitch *esw,
|
||||
enum mlx5_eswitch_vport_event enabled_events);
|
||||
void mlx5_eswitch_disable_pf_vf_vports(struct mlx5_eswitch *esw);
|
||||
|
||||
int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
|
||||
enum mlx5_eswitch_vport_event enabled_events);
|
||||
void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
|
||||
|
||||
int
|
||||
esw_vport_create_offloads_acl_tables(struct mlx5_eswitch *esw,
|
||||
@@ -734,16 +734,16 @@ void mlx5_esw_set_spec_source_port(struct mlx5_eswitch *esw,
|
||||
u16 vport,
|
||||
struct mlx5_flow_spec *spec);
|
||||
|
||||
int mlx5_esw_offloads_init_pf_vf_rep(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
void mlx5_esw_offloads_cleanup_pf_vf_rep(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
int mlx5_esw_offloads_init_pf_vf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
|
||||
void mlx5_esw_offloads_cleanup_pf_vf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
|
||||
|
||||
int mlx5_esw_offloads_init_sf_rep(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
int mlx5_esw_offloads_init_sf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
|
||||
struct mlx5_devlink_port *dl_port,
|
||||
u32 controller, u32 sfnum);
|
||||
void mlx5_esw_offloads_cleanup_sf_rep(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
void mlx5_esw_offloads_cleanup_sf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
|
||||
|
||||
int mlx5_esw_offloads_load_rep(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
void mlx5_esw_offloads_unload_rep(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
int mlx5_esw_offloads_load_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
|
||||
void mlx5_esw_offloads_unload_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
|
||||
|
||||
int mlx5_eswitch_load_sf_vport(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
enum mlx5_eswitch_vport_event enabled_events,
|
||||
@@ -754,16 +754,18 @@ int mlx5_eswitch_load_vf_vports(struct mlx5_eswitch *esw, u16 num_vfs,
|
||||
enum mlx5_eswitch_vport_event enabled_events);
|
||||
void mlx5_eswitch_unload_vf_vports(struct mlx5_eswitch *esw, u16 num_vfs);
|
||||
|
||||
int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
void mlx5_esw_offloads_pf_vf_devlink_port_cleanup(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
int mlx5_esw_offloads_pf_vf_devlink_port_init(struct mlx5_eswitch *esw,
|
||||
struct mlx5_vport *vport);
|
||||
void mlx5_esw_offloads_pf_vf_devlink_port_cleanup(struct mlx5_eswitch *esw,
|
||||
struct mlx5_vport *vport);
|
||||
|
||||
int mlx5_esw_offloads_sf_devlink_port_init(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
int mlx5_esw_offloads_sf_devlink_port_init(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
|
||||
struct mlx5_devlink_port *dl_port,
|
||||
u32 controller, u32 sfnum);
|
||||
void mlx5_esw_offloads_sf_devlink_port_cleanup(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
void mlx5_esw_offloads_sf_devlink_port_cleanup(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
|
||||
|
||||
int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
void mlx5_esw_offloads_devlink_port_unregister(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
|
||||
void mlx5_esw_offloads_devlink_port_unregister(struct mlx5_eswitch *esw, struct mlx5_vport *vport);
|
||||
struct devlink_port *mlx5_esw_offloads_devlink_port(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
|
||||
int mlx5_esw_sf_max_hpf_functions(struct mlx5_core_dev *dev, u16 *max_sfs, u16 *sf_base_id);
|
||||
|
||||
@@ -2535,63 +2535,63 @@ static void mlx5_esw_offloads_rep_unload(struct mlx5_eswitch *esw, u16 vport_num
|
||||
__esw_offloads_unload_rep(esw, rep, rep_type);
|
||||
}
|
||||
|
||||
int mlx5_esw_offloads_init_pf_vf_rep(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
int mlx5_esw_offloads_init_pf_vf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
{
|
||||
if (esw->mode != MLX5_ESWITCH_OFFLOADS)
|
||||
return 0;
|
||||
|
||||
return mlx5_esw_offloads_pf_vf_devlink_port_init(esw, vport_num);
|
||||
return mlx5_esw_offloads_pf_vf_devlink_port_init(esw, vport);
|
||||
}
|
||||
|
||||
void mlx5_esw_offloads_cleanup_pf_vf_rep(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
void mlx5_esw_offloads_cleanup_pf_vf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
{
|
||||
if (esw->mode != MLX5_ESWITCH_OFFLOADS)
|
||||
return;
|
||||
|
||||
mlx5_esw_offloads_pf_vf_devlink_port_cleanup(esw, vport_num);
|
||||
mlx5_esw_offloads_pf_vf_devlink_port_cleanup(esw, vport);
|
||||
}
|
||||
|
||||
int mlx5_esw_offloads_init_sf_rep(struct mlx5_eswitch *esw, u16 vport_num,
|
||||
int mlx5_esw_offloads_init_sf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
|
||||
struct mlx5_devlink_port *dl_port,
|
||||
u32 controller, u32 sfnum)
|
||||
{
|
||||
return mlx5_esw_offloads_sf_devlink_port_init(esw, vport_num, dl_port, controller, sfnum);
|
||||
return mlx5_esw_offloads_sf_devlink_port_init(esw, vport, dl_port, controller, sfnum);
|
||||
}
|
||||
|
||||
void mlx5_esw_offloads_cleanup_sf_rep(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
void mlx5_esw_offloads_cleanup_sf_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
{
|
||||
mlx5_esw_offloads_sf_devlink_port_cleanup(esw, vport_num);
|
||||
mlx5_esw_offloads_sf_devlink_port_cleanup(esw, vport);
|
||||
}
|
||||
|
||||
int mlx5_esw_offloads_load_rep(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
int mlx5_esw_offloads_load_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (esw->mode != MLX5_ESWITCH_OFFLOADS)
|
||||
return 0;
|
||||
|
||||
err = mlx5_esw_offloads_devlink_port_register(esw, vport_num);
|
||||
err = mlx5_esw_offloads_devlink_port_register(esw, vport);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = mlx5_esw_offloads_rep_load(esw, vport_num);
|
||||
err = mlx5_esw_offloads_rep_load(esw, vport->vport);
|
||||
if (err)
|
||||
goto load_err;
|
||||
return err;
|
||||
|
||||
load_err:
|
||||
mlx5_esw_offloads_devlink_port_unregister(esw, vport_num);
|
||||
mlx5_esw_offloads_devlink_port_unregister(esw, vport);
|
||||
return err;
|
||||
}
|
||||
|
||||
void mlx5_esw_offloads_unload_rep(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
void mlx5_esw_offloads_unload_rep(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
{
|
||||
if (esw->mode != MLX5_ESWITCH_OFFLOADS)
|
||||
return;
|
||||
|
||||
mlx5_esw_offloads_rep_unload(esw, vport_num);
|
||||
mlx5_esw_offloads_rep_unload(esw, vport->vport);
|
||||
|
||||
mlx5_esw_offloads_devlink_port_unregister(esw, vport_num);
|
||||
mlx5_esw_offloads_devlink_port_unregister(esw, vport);
|
||||
}
|
||||
|
||||
static int esw_set_slave_root_fdb(struct mlx5_core_dev *master,
|
||||
|
||||
Reference in New Issue
Block a user