mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
net/mlx5: E-Switch, skip uplink IB rep load for SD secondary devices
SD secondary devices share the primary's uplink and do not have their own uplink representor. When reloading IB reps on secondary devices, skip the uplink and only load VF/SF vport IB reps. Signed-off-by: Shay Drory <shayd@nvidia.com> Reviewed-by: Mark Bloch <mbloch@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/20260612113904.537595-2-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
2319688890
commit
597baeb467
|
|
@ -3643,11 +3643,19 @@ int mlx5_eswitch_reload_ib_reps(struct mlx5_eswitch *esw)
|
|||
if (atomic_read(&rep->rep_data[REP_ETH].state) != REP_LOADED)
|
||||
return 0;
|
||||
|
||||
ret = __esw_offloads_load_rep(esw, rep, REP_IB, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* SD secondary devices share the primary's uplink and do not
|
||||
* have their own uplink representor. Only load VF/SF vports.
|
||||
*/
|
||||
if (mlx5_sd_is_primary(esw->dev)) {
|
||||
ret = __esw_offloads_load_rep(esw, rep, REP_IB, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
mlx5_esw_for_each_rep(esw, i, rep) {
|
||||
if (!mlx5_sd_is_primary(esw->dev) &&
|
||||
rep->vport == MLX5_VPORT_UPLINK)
|
||||
continue;
|
||||
if (atomic_read(&rep->rep_data[REP_ETH].state) == REP_LOADED)
|
||||
__esw_offloads_load_rep(esw, rep, REP_IB, NULL);
|
||||
}
|
||||
|
|
@ -4586,14 +4594,23 @@ mlx5_eswitch_register_vport_reps_blocked(struct mlx5_eswitch *esw,
|
|||
|
||||
static void mlx5_eswitch_reload_reps_blocked(struct mlx5_eswitch *esw)
|
||||
{
|
||||
struct mlx5_eswitch_rep *uplink;
|
||||
struct mlx5_vport *vport;
|
||||
bool newly_loaded;
|
||||
unsigned long i;
|
||||
|
||||
if (esw->mode != MLX5_ESWITCH_OFFLOADS)
|
||||
return;
|
||||
|
||||
if (mlx5_esw_offloads_rep_load(esw, MLX5_VPORT_UPLINK))
|
||||
uplink = mlx5_eswitch_get_rep(esw, MLX5_VPORT_UPLINK);
|
||||
if (__esw_offloads_load_rep(esw, uplink, REP_ETH, &newly_loaded))
|
||||
return;
|
||||
if (mlx5_sd_is_primary(esw->dev) &&
|
||||
__esw_offloads_load_rep(esw, uplink, REP_IB, NULL)) {
|
||||
if (newly_loaded)
|
||||
__esw_offloads_unload_rep(esw, uplink, REP_ETH);
|
||||
return;
|
||||
}
|
||||
|
||||
mlx5_esw_for_each_vport(esw, i, vport) {
|
||||
if (!vport)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user