mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
net/mlx5: Register devlink ports for satellite PFs
Include satellite PFs in mlx5_eswitch_is_pf_vf_vport() so they receive the standard PF/VF devlink port operations. Update mlx5_esw_devlink_port_supported() and devlink port attribute setup to register SPF devlink ports with controller number and PF number. Add mlx5_esw_spf_vport_to_idx() to look up the SPF array index by vport number, and mlx5_esw_is_spf_vport() boolean wrapper to identify satellite PF vports. Signed-off-by: Moshe Shemesh <moshe@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/20260521110843.367329-9-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
90a6aabb74
commit
e020a70672
|
|
@ -16,7 +16,8 @@ static bool mlx5_esw_devlink_port_supported(struct mlx5_eswitch *esw, u16 vport_
|
|||
return (mlx5_core_is_ecpf(esw->dev) &&
|
||||
vport_num == MLX5_VPORT_HOST_PF) ||
|
||||
mlx5_eswitch_is_vf_vport(esw, vport_num) ||
|
||||
mlx5_core_is_ec_vf_vport(esw->dev, vport_num);
|
||||
mlx5_core_is_ec_vf_vport(esw->dev, vport_num) ||
|
||||
mlx5_esw_is_spf_vport(esw, vport_num);
|
||||
}
|
||||
|
||||
static void mlx5_esw_offloads_pf_vf_devlink_port_attrs_set(struct mlx5_eswitch *esw,
|
||||
|
|
@ -64,6 +65,16 @@ static void mlx5_esw_offloads_pf_vf_devlink_port_attrs_set(struct mlx5_eswitch *
|
|||
dl_port->attrs.switch_id.id_len = ppid.id_len;
|
||||
devlink_port_attrs_pci_vf_set(dl_port, 0, pfnum,
|
||||
vport_num - base_vport, false);
|
||||
} else if (mlx5_esw_is_spf_vport(esw, vport_num)) {
|
||||
int spf_idx = mlx5_esw_spf_vport_to_idx(esw, vport_num);
|
||||
|
||||
controller_num = esw->esw_funcs.spfs[spf_idx].host_number + 1;
|
||||
pfnum = esw->esw_funcs.spfs[spf_idx].pf_num;
|
||||
|
||||
memcpy(dl_port->attrs.switch_id.id, ppid.id, ppid.id_len);
|
||||
dl_port->attrs.switch_id.id_len = ppid.id_len;
|
||||
devlink_port_attrs_pci_pf_set(dl_port, controller_num, pfnum,
|
||||
true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2672,10 +2672,29 @@ bool mlx5_eswitch_is_vf_vport(struct mlx5_eswitch *esw, u16 vport_num)
|
|||
return mlx5_esw_check_port_type(esw, vport_num, MLX5_ESW_VPT_VF);
|
||||
}
|
||||
|
||||
int mlx5_esw_spf_vport_to_idx(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
{
|
||||
struct mlx5_esw_functions *esw_funcs = &esw->esw_funcs;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < esw_funcs->num_spfs; i++) {
|
||||
if (esw_funcs->spfs[i].vport_num == vport_num)
|
||||
return i;
|
||||
}
|
||||
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
bool mlx5_esw_is_spf_vport(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
{
|
||||
return mlx5_esw_spf_vport_to_idx(esw, vport_num) >= 0;
|
||||
}
|
||||
|
||||
bool mlx5_eswitch_is_pf_vf_vport(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
{
|
||||
return vport_num == MLX5_VPORT_HOST_PF ||
|
||||
mlx5_eswitch_is_vf_vport(esw, vport_num);
|
||||
mlx5_eswitch_is_vf_vport(esw, vport_num) ||
|
||||
mlx5_esw_is_spf_vport(esw, vport_num);
|
||||
}
|
||||
|
||||
bool mlx5_esw_is_sf_vport(struct mlx5_eswitch *esw, u16 vport_num)
|
||||
|
|
|
|||
|
|
@ -799,6 +799,8 @@ struct mlx5_vport *__must_check
|
|||
mlx5_eswitch_get_vport(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
|
||||
bool mlx5_eswitch_is_vf_vport(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
int mlx5_esw_spf_vport_to_idx(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
bool mlx5_esw_is_spf_vport(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
bool mlx5_eswitch_is_pf_vf_vport(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
bool mlx5_esw_is_sf_vport(struct mlx5_eswitch *esw, u16 vport_num);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user