mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
net/mlx5: E-Switch, Refactor eswitch SR-IOV interface
Devlink eswitch mode is not necessarily related to SR-IOV, e.g, ECPF can be at offload mode when SR-IOV is not enabled. Rename the interface and eswitch mode names to decouple from SR-IOV, and cleanup eswitch messages accordingly. Signed-off-by: Bodong Wang <bodong@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
e1d974d03e
commit
f6455de0b0
11 changed files with 77 additions and 76 deletions
|
@ -28,7 +28,7 @@ struct net_device *mlx5_ib_get_rep_netdev(struct mlx5_eswitch *esw,
|
|||
#else /* CONFIG_MLX5_ESWITCH */
|
||||
static inline u8 mlx5_ib_eswitch_mode(struct mlx5_eswitch *esw)
|
||||
{
|
||||
return SRIOV_NONE;
|
||||
return MLX5_ESWITCH_NONE;
|
||||
}
|
||||
|
||||
static inline
|
||||
|
|
|
@ -6814,7 +6814,7 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
|
|||
printk_once(KERN_INFO "%s", mlx5_version);
|
||||
|
||||
if (MLX5_ESWITCH_MANAGER(mdev) &&
|
||||
mlx5_ib_eswitch_mode(mdev->priv.eswitch) == SRIOV_OFFLOADS) {
|
||||
mlx5_ib_eswitch_mode(mdev->priv.eswitch) == MLX5_ESWITCH_OFFLOADS) {
|
||||
if (!mlx5_core_mp_enabled(mdev))
|
||||
mlx5_ib_register_vport_reps(mdev);
|
||||
return mdev;
|
||||
|
|
|
@ -5115,7 +5115,7 @@ static void *mlx5e_add(struct mlx5_core_dev *mdev)
|
|||
|
||||
#ifdef CONFIG_MLX5_ESWITCH
|
||||
if (MLX5_ESWITCH_MANAGER(mdev) &&
|
||||
mlx5_eswitch_mode(mdev->priv.eswitch) == SRIOV_OFFLOADS) {
|
||||
mlx5_eswitch_mode(mdev->priv.eswitch) == MLX5_ESWITCH_OFFLOADS) {
|
||||
mlx5e_rep_register_vport_reps(mdev);
|
||||
return mdev;
|
||||
}
|
||||
|
|
|
@ -391,7 +391,7 @@ static int mlx5e_rep_get_port_parent_id(struct net_device *dev,
|
|||
struct mlx5e_priv *uplink_priv = NULL;
|
||||
struct net_device *uplink_dev;
|
||||
|
||||
if (esw->mode == SRIOV_NONE)
|
||||
if (esw->mode == MLX5_ESWITCH_NONE)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
uplink_dev = mlx5_eswitch_uplink_get_proto_dev(esw, REP_ETH);
|
||||
|
@ -419,7 +419,7 @@ static void mlx5e_sqs2vport_stop(struct mlx5_eswitch *esw,
|
|||
struct mlx5e_rep_sq *rep_sq, *tmp;
|
||||
struct mlx5e_rep_priv *rpriv;
|
||||
|
||||
if (esw->mode != SRIOV_OFFLOADS)
|
||||
if (esw->mode != MLX5_ESWITCH_OFFLOADS)
|
||||
return;
|
||||
|
||||
rpriv = mlx5e_rep_to_rep_priv(rep);
|
||||
|
@ -440,7 +440,7 @@ static int mlx5e_sqs2vport_start(struct mlx5_eswitch *esw,
|
|||
int err;
|
||||
int i;
|
||||
|
||||
if (esw->mode != SRIOV_OFFLOADS)
|
||||
if (esw->mode != MLX5_ESWITCH_OFFLOADS)
|
||||
return 0;
|
||||
|
||||
rpriv = mlx5e_rep_to_rep_priv(rep);
|
||||
|
|
|
@ -3342,7 +3342,7 @@ mlx5e_tc_add_flow(struct mlx5e_priv *priv,
|
|||
if (!tc_can_offload_extack(priv->netdev, f->common.extack))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (esw && esw->mode == SRIOV_OFFLOADS)
|
||||
if (esw && esw->mode == MLX5_ESWITCH_OFFLOADS)
|
||||
err = mlx5e_add_fdb_flow(priv, f, flow_flags,
|
||||
filter_dev, flow);
|
||||
else
|
||||
|
|
|
@ -497,7 +497,7 @@ static int esw_add_uc_addr(struct mlx5_eswitch *esw, struct vport_addr *vaddr)
|
|||
|
||||
fdb_add:
|
||||
/* SRIOV is enabled: Forward UC MAC to vport */
|
||||
if (esw->fdb_table.legacy.fdb && esw->mode == SRIOV_LEGACY)
|
||||
if (esw->fdb_table.legacy.fdb && esw->mode == MLX5_ESWITCH_LEGACY)
|
||||
vaddr->flow_rule = esw_fdb_set_vport_rule(esw, mac, vport);
|
||||
|
||||
esw_debug(esw->dev, "\tADDED UC MAC: vport[%d] %pM fr(%p)\n",
|
||||
|
@ -1577,7 +1577,7 @@ static void esw_apply_vport_conf(struct mlx5_eswitch *esw,
|
|||
flags);
|
||||
|
||||
/* Only legacy mode needs ACLs */
|
||||
if (esw->mode == SRIOV_LEGACY) {
|
||||
if (esw->mode == MLX5_ESWITCH_LEGACY) {
|
||||
esw_vport_ingress_config(esw, vport);
|
||||
esw_vport_egress_config(esw, vport);
|
||||
}
|
||||
|
@ -1629,7 +1629,7 @@ static void esw_enable_vport(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
|
|||
esw_debug(esw->dev, "Enabling VPORT(%d)\n", vport_num);
|
||||
|
||||
/* Create steering drop counters for ingress and egress ACLs */
|
||||
if (vport_num && esw->mode == SRIOV_LEGACY)
|
||||
if (vport_num && esw->mode == MLX5_ESWITCH_LEGACY)
|
||||
esw_vport_create_drop_counters(vport);
|
||||
|
||||
/* Restore old vport configuration */
|
||||
|
@ -1683,7 +1683,7 @@ static void esw_disable_vport(struct mlx5_eswitch *esw,
|
|||
vport->enabled_events = 0;
|
||||
esw_vport_disable_qos(esw, vport);
|
||||
if (esw->manager_vport != vport_num &&
|
||||
esw->mode == SRIOV_LEGACY) {
|
||||
esw->mode == MLX5_ESWITCH_LEGACY) {
|
||||
mlx5_modify_vport_admin_state(esw->dev,
|
||||
MLX5_VPORT_STATE_OP_MOD_ESW_VPORT,
|
||||
vport_num, 1,
|
||||
|
@ -1728,7 +1728,7 @@ int mlx5_esw_query_functions(struct mlx5_core_dev *dev, u32 *out, int outlen)
|
|||
/* Public E-Switch API */
|
||||
#define ESW_ALLOWED(esw) ((esw) && MLX5_ESWITCH_MANAGER((esw)->dev))
|
||||
|
||||
int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode)
|
||||
int mlx5_eswitch_enable(struct mlx5_eswitch *esw, int nvfs, int mode)
|
||||
{
|
||||
struct mlx5_vport *vport;
|
||||
int total_nvports = 0;
|
||||
|
@ -1737,19 +1737,17 @@ int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode)
|
|||
|
||||
if (!ESW_ALLOWED(esw) ||
|
||||
!MLX5_CAP_ESW_FLOWTABLE_FDB(esw->dev, ft_support)) {
|
||||
esw_warn(esw->dev, "E-Switch FDB is not supported, aborting ...\n");
|
||||
esw_warn(esw->dev, "FDB is not supported, aborting ...\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (!MLX5_CAP_ESW_INGRESS_ACL(esw->dev, ft_support))
|
||||
esw_warn(esw->dev, "E-Switch ingress ACL is not supported by FW\n");
|
||||
esw_warn(esw->dev, "ingress ACL is not supported by FW\n");
|
||||
|
||||
if (!MLX5_CAP_ESW_EGRESS_ACL(esw->dev, ft_support))
|
||||
esw_warn(esw->dev, "E-Switch engress ACL is not supported by FW\n");
|
||||
esw_warn(esw->dev, "engress ACL is not supported by FW\n");
|
||||
|
||||
esw_info(esw->dev, "E-Switch enable SRIOV: nvfs(%d) mode (%d)\n", nvfs, mode);
|
||||
|
||||
if (mode == SRIOV_OFFLOADS) {
|
||||
if (mode == MLX5_ESWITCH_OFFLOADS) {
|
||||
if (mlx5_core_is_ecpf_esw_manager(esw->dev))
|
||||
total_nvports = esw->total_vports;
|
||||
else
|
||||
|
@ -1760,7 +1758,7 @@ int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode)
|
|||
|
||||
mlx5_lag_update(esw->dev);
|
||||
|
||||
if (mode == SRIOV_LEGACY) {
|
||||
if (mode == MLX5_ESWITCH_LEGACY) {
|
||||
err = esw_create_legacy_table(esw);
|
||||
if (err)
|
||||
goto abort;
|
||||
|
@ -1777,11 +1775,11 @@ int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode)
|
|||
if (err)
|
||||
esw_warn(esw->dev, "Failed to create eswitch TSAR");
|
||||
|
||||
/* Don't enable vport events when in SRIOV_OFFLOADS mode, since:
|
||||
/* Don't enable vport events when in MLX5_ESWITCH_OFFLOADS mode, since:
|
||||
* 1. L2 table (MPFS) is programmed by PF/VF representors netdevs set_rx_mode
|
||||
* 2. FDB/Eswitch is programmed by user space tools
|
||||
*/
|
||||
enabled_events = (mode == SRIOV_LEGACY) ? SRIOV_VPORT_EVENTS : 0;
|
||||
enabled_events = (mode == MLX5_ESWITCH_LEGACY) ? SRIOV_VPORT_EVENTS : 0;
|
||||
|
||||
/* Enable PF vport */
|
||||
vport = mlx5_eswitch_get_vport(esw, MLX5_VPORT_PF);
|
||||
|
@ -1797,19 +1795,21 @@ int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode)
|
|||
mlx5_esw_for_each_vf_vport(esw, i, vport, nvfs)
|
||||
esw_enable_vport(esw, vport, enabled_events);
|
||||
|
||||
if (mode == SRIOV_LEGACY) {
|
||||
if (mode == MLX5_ESWITCH_LEGACY) {
|
||||
MLX5_NB_INIT(&esw->nb, eswitch_vport_event, NIC_VPORT_CHANGE);
|
||||
mlx5_eq_notifier_register(esw->dev, &esw->nb);
|
||||
}
|
||||
|
||||
esw_info(esw->dev, "SRIOV enabled: active vports(%d)\n",
|
||||
esw->enabled_vports);
|
||||
esw_info(esw->dev, "Enable: mode(%s), nvfs(%d), active vports(%d)\n",
|
||||
mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS",
|
||||
nvfs, esw->enabled_vports);
|
||||
|
||||
return 0;
|
||||
|
||||
abort:
|
||||
esw->mode = SRIOV_NONE;
|
||||
esw->mode = MLX5_ESWITCH_NONE;
|
||||
|
||||
if (mode == SRIOV_OFFLOADS) {
|
||||
if (mode == MLX5_ESWITCH_OFFLOADS) {
|
||||
mlx5_reload_interface(esw->dev, MLX5_INTERFACE_PROTOCOL_IB);
|
||||
mlx5_reload_interface(esw->dev, MLX5_INTERFACE_PROTOCOL_ETH);
|
||||
}
|
||||
|
@ -1817,22 +1817,23 @@ int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode)
|
|||
return err;
|
||||
}
|
||||
|
||||
void mlx5_eswitch_disable_sriov(struct mlx5_eswitch *esw)
|
||||
void mlx5_eswitch_disable(struct mlx5_eswitch *esw)
|
||||
{
|
||||
struct esw_mc_addr *mc_promisc;
|
||||
struct mlx5_vport *vport;
|
||||
int old_mode;
|
||||
int i;
|
||||
|
||||
if (!ESW_ALLOWED(esw) || esw->mode == SRIOV_NONE)
|
||||
if (!ESW_ALLOWED(esw) || esw->mode == MLX5_ESWITCH_NONE)
|
||||
return;
|
||||
|
||||
esw_info(esw->dev, "disable SRIOV: active vports(%d) mode(%d)\n",
|
||||
esw->enabled_vports, esw->mode);
|
||||
esw_info(esw->dev, "Disable: mode(%s), nvfs(%d), active vports(%d)\n",
|
||||
esw->mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS",
|
||||
esw->dev->priv.sriov.num_vfs, esw->enabled_vports);
|
||||
|
||||
mc_promisc = &esw->mc_promisc;
|
||||
|
||||
if (esw->mode == SRIOV_LEGACY)
|
||||
if (esw->mode == MLX5_ESWITCH_LEGACY)
|
||||
mlx5_eq_notifier_unregister(esw->dev, &esw->nb);
|
||||
|
||||
mlx5_esw_for_all_vports(esw, i, vport)
|
||||
|
@ -1843,17 +1844,17 @@ void mlx5_eswitch_disable_sriov(struct mlx5_eswitch *esw)
|
|||
|
||||
esw_destroy_tsar(esw);
|
||||
|
||||
if (esw->mode == SRIOV_LEGACY)
|
||||
if (esw->mode == MLX5_ESWITCH_LEGACY)
|
||||
esw_destroy_legacy_table(esw);
|
||||
else if (esw->mode == SRIOV_OFFLOADS)
|
||||
else if (esw->mode == MLX5_ESWITCH_OFFLOADS)
|
||||
esw_offloads_cleanup(esw);
|
||||
|
||||
old_mode = esw->mode;
|
||||
esw->mode = SRIOV_NONE;
|
||||
esw->mode = MLX5_ESWITCH_NONE;
|
||||
|
||||
mlx5_lag_update(esw->dev);
|
||||
|
||||
if (old_mode == SRIOV_OFFLOADS) {
|
||||
if (old_mode == MLX5_ESWITCH_OFFLOADS) {
|
||||
mlx5_reload_interface(esw->dev, MLX5_INTERFACE_PROTOCOL_IB);
|
||||
mlx5_reload_interface(esw->dev, MLX5_INTERFACE_PROTOCOL_ETH);
|
||||
}
|
||||
|
@ -1914,7 +1915,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
|
|||
}
|
||||
|
||||
esw->enabled_vports = 0;
|
||||
esw->mode = SRIOV_NONE;
|
||||
esw->mode = MLX5_ESWITCH_NONE;
|
||||
esw->offloads.inline_mode = MLX5_INLINE_MODE_NONE;
|
||||
if (MLX5_CAP_ESW_FLOWTABLE_FDB(dev, reformat) &&
|
||||
MLX5_CAP_ESW_FLOWTABLE_FDB(dev, decap))
|
||||
|
@ -1984,7 +1985,7 @@ int mlx5_eswitch_set_vport_mac(struct mlx5_eswitch *esw,
|
|||
|
||||
ether_addr_copy(evport->info.mac, mac);
|
||||
evport->info.node_guid = node_guid;
|
||||
if (evport->enabled && esw->mode == SRIOV_LEGACY)
|
||||
if (evport->enabled && esw->mode == MLX5_ESWITCH_LEGACY)
|
||||
err = esw_vport_ingress_config(esw, evport);
|
||||
|
||||
unlock:
|
||||
|
@ -2068,7 +2069,7 @@ int __mlx5_eswitch_set_vport_vlan(struct mlx5_eswitch *esw,
|
|||
|
||||
evport->info.vlan = vlan;
|
||||
evport->info.qos = qos;
|
||||
if (evport->enabled && esw->mode == SRIOV_LEGACY) {
|
||||
if (evport->enabled && esw->mode == MLX5_ESWITCH_LEGACY) {
|
||||
err = esw_vport_ingress_config(esw, evport);
|
||||
if (err)
|
||||
goto unlock;
|
||||
|
@ -2110,7 +2111,7 @@ int mlx5_eswitch_set_vport_spoofchk(struct mlx5_eswitch *esw,
|
|||
mlx5_core_warn(esw->dev,
|
||||
"Spoofchk in set while MAC is invalid, vport(%d)\n",
|
||||
evport->vport);
|
||||
if (evport->enabled && esw->mode == SRIOV_LEGACY)
|
||||
if (evport->enabled && esw->mode == MLX5_ESWITCH_LEGACY)
|
||||
err = esw_vport_ingress_config(esw, evport);
|
||||
if (err)
|
||||
evport->info.spoofchk = pschk;
|
||||
|
@ -2206,7 +2207,7 @@ int mlx5_eswitch_set_vepa(struct mlx5_eswitch *esw, u8 setting)
|
|||
return -EPERM;
|
||||
|
||||
mutex_lock(&esw->state_lock);
|
||||
if (esw->mode != SRIOV_LEGACY) {
|
||||
if (esw->mode != MLX5_ESWITCH_LEGACY) {
|
||||
err = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
|
@ -2229,7 +2230,7 @@ int mlx5_eswitch_get_vepa(struct mlx5_eswitch *esw, u8 *setting)
|
|||
return -EPERM;
|
||||
|
||||
mutex_lock(&esw->state_lock);
|
||||
if (esw->mode != SRIOV_LEGACY) {
|
||||
if (esw->mode != MLX5_ESWITCH_LEGACY) {
|
||||
err = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
|
@ -2372,7 +2373,7 @@ static int mlx5_eswitch_query_vport_drop_stats(struct mlx5_core_dev *dev,
|
|||
u64 bytes = 0;
|
||||
int err = 0;
|
||||
|
||||
if (!vport->enabled || esw->mode != SRIOV_LEGACY)
|
||||
if (!vport->enabled || esw->mode != MLX5_ESWITCH_LEGACY)
|
||||
return 0;
|
||||
|
||||
if (vport->egress.drop_counter)
|
||||
|
@ -2482,7 +2483,7 @@ int mlx5_eswitch_get_vport_stats(struct mlx5_eswitch *esw,
|
|||
|
||||
u8 mlx5_eswitch_mode(struct mlx5_eswitch *esw)
|
||||
{
|
||||
return ESW_ALLOWED(esw) ? esw->mode : SRIOV_NONE;
|
||||
return ESW_ALLOWED(esw) ? esw->mode : MLX5_ESWITCH_NONE;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mlx5_eswitch_mode);
|
||||
|
||||
|
@ -2499,10 +2500,10 @@ EXPORT_SYMBOL(mlx5_eswitch_get_encap_mode);
|
|||
|
||||
bool mlx5_esw_lag_prereq(struct mlx5_core_dev *dev0, struct mlx5_core_dev *dev1)
|
||||
{
|
||||
if ((dev0->priv.eswitch->mode == SRIOV_NONE &&
|
||||
dev1->priv.eswitch->mode == SRIOV_NONE) ||
|
||||
(dev0->priv.eswitch->mode == SRIOV_OFFLOADS &&
|
||||
dev1->priv.eswitch->mode == SRIOV_OFFLOADS))
|
||||
if ((dev0->priv.eswitch->mode == MLX5_ESWITCH_NONE &&
|
||||
dev1->priv.eswitch->mode == MLX5_ESWITCH_NONE) ||
|
||||
(dev0->priv.eswitch->mode == MLX5_ESWITCH_OFFLOADS &&
|
||||
dev1->priv.eswitch->mode == MLX5_ESWITCH_OFFLOADS))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@ -2511,6 +2512,6 @@ bool mlx5_esw_lag_prereq(struct mlx5_core_dev *dev0, struct mlx5_core_dev *dev1)
|
|||
bool mlx5_esw_multipath_prereq(struct mlx5_core_dev *dev0,
|
||||
struct mlx5_core_dev *dev1)
|
||||
{
|
||||
return (dev0->priv.eswitch->mode == SRIOV_OFFLOADS &&
|
||||
dev1->priv.eswitch->mode == SRIOV_OFFLOADS);
|
||||
return (dev0->priv.eswitch->mode == MLX5_ESWITCH_OFFLOADS &&
|
||||
dev1->priv.eswitch->mode == MLX5_ESWITCH_OFFLOADS);
|
||||
}
|
||||
|
|
|
@ -253,8 +253,8 @@ void esw_vport_del_ingress_acl_modify_metadata(struct mlx5_eswitch *esw,
|
|||
/* E-Switch API */
|
||||
int mlx5_eswitch_init(struct mlx5_core_dev *dev);
|
||||
void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw);
|
||||
int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode);
|
||||
void mlx5_eswitch_disable_sriov(struct mlx5_eswitch *esw);
|
||||
int mlx5_eswitch_enable(struct mlx5_eswitch *esw, int nvfs, int mode);
|
||||
void mlx5_eswitch_disable(struct mlx5_eswitch *esw);
|
||||
int mlx5_eswitch_set_vport_mac(struct mlx5_eswitch *esw,
|
||||
int vport, u8 mac[ETH_ALEN]);
|
||||
int mlx5_eswitch_set_vport_state(struct mlx5_eswitch *esw,
|
||||
|
@ -528,8 +528,8 @@ bool mlx5_eswitch_is_vf_vport(const struct mlx5_eswitch *esw, u16 vport_num);
|
|||
/* eswitch API stubs */
|
||||
static inline int mlx5_eswitch_init(struct mlx5_core_dev *dev) { return 0; }
|
||||
static inline void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw) {}
|
||||
static inline int mlx5_eswitch_enable_sriov(struct mlx5_eswitch *esw, int nvfs, int mode) { return 0; }
|
||||
static inline void mlx5_eswitch_disable_sriov(struct mlx5_eswitch *esw) {}
|
||||
static inline int mlx5_eswitch_enable(struct mlx5_eswitch *esw, int nvfs, int mode) { return 0; }
|
||||
static inline void mlx5_eswitch_disable(struct mlx5_eswitch *esw) {}
|
||||
static inline bool mlx5_esw_lag_prereq(struct mlx5_core_dev *dev0, struct mlx5_core_dev *dev1) { return true; }
|
||||
static inline bool mlx5_eswitch_is_funcs_handler(struct mlx5_core_dev *dev) { return false; }
|
||||
static inline int
|
||||
|
|
|
@ -147,7 +147,7 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw,
|
|||
struct mlx5_flow_table *fdb;
|
||||
int j, i = 0;
|
||||
|
||||
if (esw->mode != SRIOV_OFFLOADS)
|
||||
if (esw->mode != MLX5_ESWITCH_OFFLOADS)
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
|
||||
flow_act.action = attr->action;
|
||||
|
@ -1358,19 +1358,19 @@ static int esw_offloads_start(struct mlx5_eswitch *esw,
|
|||
{
|
||||
int err, err1, num_vfs = esw->dev->priv.sriov.num_vfs;
|
||||
|
||||
if (esw->mode != SRIOV_LEGACY &&
|
||||
if (esw->mode != MLX5_ESWITCH_LEGACY &&
|
||||
!mlx5_core_is_ecpf_esw_manager(esw->dev)) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"Can't set offloads mode, SRIOV legacy not enabled");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mlx5_eswitch_disable_sriov(esw);
|
||||
err = mlx5_eswitch_enable_sriov(esw, num_vfs, SRIOV_OFFLOADS);
|
||||
mlx5_eswitch_disable(esw);
|
||||
err = mlx5_eswitch_enable(esw, num_vfs, MLX5_ESWITCH_OFFLOADS);
|
||||
if (err) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"Failed setting eswitch to offloads");
|
||||
err1 = mlx5_eswitch_enable_sriov(esw, num_vfs, SRIOV_LEGACY);
|
||||
err1 = mlx5_eswitch_enable(esw, num_vfs, MLX5_ESWITCH_LEGACY);
|
||||
if (err1) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"Failed setting eswitch back to legacy");
|
||||
|
@ -2174,11 +2174,11 @@ static int esw_offloads_stop(struct mlx5_eswitch *esw,
|
|||
{
|
||||
int err, err1, num_vfs = esw->dev->priv.sriov.num_vfs;
|
||||
|
||||
mlx5_eswitch_disable_sriov(esw);
|
||||
err = mlx5_eswitch_enable_sriov(esw, num_vfs, SRIOV_LEGACY);
|
||||
mlx5_eswitch_disable(esw);
|
||||
err = mlx5_eswitch_enable(esw, num_vfs, MLX5_ESWITCH_LEGACY);
|
||||
if (err) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Failed setting eswitch to legacy");
|
||||
err1 = mlx5_eswitch_enable_sriov(esw, num_vfs, SRIOV_OFFLOADS);
|
||||
err1 = mlx5_eswitch_enable(esw, num_vfs, MLX5_ESWITCH_OFFLOADS);
|
||||
if (err1) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"Failed setting eswitch back to offloads");
|
||||
|
@ -2203,10 +2203,10 @@ static int esw_mode_from_devlink(u16 mode, u16 *mlx5_mode)
|
|||
{
|
||||
switch (mode) {
|
||||
case DEVLINK_ESWITCH_MODE_LEGACY:
|
||||
*mlx5_mode = SRIOV_LEGACY;
|
||||
*mlx5_mode = MLX5_ESWITCH_LEGACY;
|
||||
break;
|
||||
case DEVLINK_ESWITCH_MODE_SWITCHDEV:
|
||||
*mlx5_mode = SRIOV_OFFLOADS;
|
||||
*mlx5_mode = MLX5_ESWITCH_OFFLOADS;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
@ -2218,10 +2218,10 @@ static int esw_mode_from_devlink(u16 mode, u16 *mlx5_mode)
|
|||
static int esw_mode_to_devlink(u16 mlx5_mode, u16 *mode)
|
||||
{
|
||||
switch (mlx5_mode) {
|
||||
case SRIOV_LEGACY:
|
||||
case MLX5_ESWITCH_LEGACY:
|
||||
*mode = DEVLINK_ESWITCH_MODE_LEGACY;
|
||||
break;
|
||||
case SRIOV_OFFLOADS:
|
||||
case MLX5_ESWITCH_OFFLOADS:
|
||||
*mode = DEVLINK_ESWITCH_MODE_SWITCHDEV;
|
||||
break;
|
||||
default:
|
||||
|
@ -2285,7 +2285,7 @@ static int mlx5_devlink_eswitch_check(struct devlink *devlink)
|
|||
if(!MLX5_ESWITCH_MANAGER(dev))
|
||||
return -EPERM;
|
||||
|
||||
if (dev->priv.eswitch->mode == SRIOV_NONE &&
|
||||
if (dev->priv.eswitch->mode == MLX5_ESWITCH_NONE &&
|
||||
!mlx5_core_is_ecpf_esw_manager(dev))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
|
@ -2408,7 +2408,7 @@ int mlx5_eswitch_inline_mode_get(struct mlx5_eswitch *esw, int nvfs, u8 *mode)
|
|||
if (!MLX5_CAP_GEN(dev, vport_group_manager))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (esw->mode == SRIOV_NONE)
|
||||
if (esw->mode == MLX5_ESWITCH_NONE)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
switch (MLX5_CAP_ETH(dev, wqe_inline_mode)) {
|
||||
|
@ -2455,7 +2455,7 @@ int mlx5_devlink_eswitch_encap_mode_set(struct devlink *devlink,
|
|||
if (encap && encap != DEVLINK_ESWITCH_ENCAP_MODE_BASIC)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (esw->mode == SRIOV_LEGACY) {
|
||||
if (esw->mode == MLX5_ESWITCH_LEGACY) {
|
||||
esw->offloads.encap = encap;
|
||||
return 0;
|
||||
}
|
||||
|
@ -2522,7 +2522,7 @@ void mlx5_eswitch_unregister_vport_reps(struct mlx5_eswitch *esw, u8 rep_type)
|
|||
struct mlx5_eswitch_rep *rep;
|
||||
int i;
|
||||
|
||||
if (esw->mode == SRIOV_OFFLOADS)
|
||||
if (esw->mode == MLX5_ESWITCH_OFFLOADS)
|
||||
__unload_reps_all_vport(esw, max_vf, rep_type);
|
||||
|
||||
mlx5_esw_for_all_reps(esw, i, rep)
|
||||
|
|
|
@ -305,8 +305,8 @@ static void mlx5_do_bond(struct mlx5_lag *ldev)
|
|||
!mlx5_sriov_is_enabled(dev1);
|
||||
|
||||
#ifdef CONFIG_MLX5_ESWITCH
|
||||
roce_lag &= dev0->priv.eswitch->mode == SRIOV_NONE &&
|
||||
dev1->priv.eswitch->mode == SRIOV_NONE;
|
||||
roce_lag &= dev0->priv.eswitch->mode == MLX5_ESWITCH_NONE &&
|
||||
dev1->priv.eswitch->mode == MLX5_ESWITCH_NONE;
|
||||
#endif
|
||||
|
||||
if (roce_lag)
|
||||
|
|
|
@ -77,7 +77,7 @@ static int mlx5_device_enable_sriov(struct mlx5_core_dev *dev, int num_vfs)
|
|||
if (!MLX5_ESWITCH_MANAGER(dev))
|
||||
goto enable_vfs_hca;
|
||||
|
||||
err = mlx5_eswitch_enable_sriov(dev->priv.eswitch, num_vfs, SRIOV_LEGACY);
|
||||
err = mlx5_eswitch_enable(dev->priv.eswitch, num_vfs, MLX5_ESWITCH_LEGACY);
|
||||
if (err) {
|
||||
mlx5_core_warn(dev,
|
||||
"failed to enable eswitch SRIOV (%d)\n", err);
|
||||
|
@ -126,7 +126,7 @@ static void mlx5_device_disable_sriov(struct mlx5_core_dev *dev)
|
|||
}
|
||||
|
||||
if (MLX5_ESWITCH_MANAGER(dev))
|
||||
mlx5_eswitch_disable_sriov(dev->priv.eswitch);
|
||||
mlx5_eswitch_disable(dev->priv.eswitch);
|
||||
|
||||
if (mlx5_wait_for_pages(dev, &dev->priv.vfs_pages))
|
||||
mlx5_core_warn(dev, "timeout reclaiming VFs pages\n");
|
||||
|
|
|
@ -12,9 +12,9 @@
|
|||
#define MLX5_ESWITCH_MANAGER(mdev) MLX5_CAP_GEN(mdev, eswitch_manager)
|
||||
|
||||
enum {
|
||||
SRIOV_NONE,
|
||||
SRIOV_LEGACY,
|
||||
SRIOV_OFFLOADS
|
||||
MLX5_ESWITCH_NONE,
|
||||
MLX5_ESWITCH_LEGACY,
|
||||
MLX5_ESWITCH_OFFLOADS
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
Loading…
Reference in a new issue