]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net/mlx5: Register SF resource on satellite PF ports
authorOr Har-Toov <ohartoov@nvidia.com>
Thu, 21 May 2026 11:08:40 +0000 (14:08 +0300)
committerJakub Kicinski <kuba@kernel.org>
Mon, 25 May 2026 20:48:51 +0000 (13:48 -0700)
Extend port-level resource registration to satellite PF vports.

Signed-off-by: Or Har-Toov <ohartoov@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/20260521110843.367329-10-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c

index 05d89769b9178ff38eb4ab43b542814857f17744..6e50311faa27f8e147a800e9e6e0fde4132b7db9 100644 (file)
@@ -176,14 +176,28 @@ static const struct devlink_port_ops mlx5_esw_dl_sf_port_ops = {
 };
 
 static int mlx5_esw_devlink_port_res_register(struct mlx5_eswitch *esw,
-                                             struct devlink_port *dl_port)
+                                             struct devlink_port *dl_port,
+                                             u16 vport_num)
 {
        struct devlink_resource_size_params size_params;
        struct mlx5_core_dev *dev = esw->dev;
        u16 max_sfs, sf_base_id;
        int err;
 
-       err = mlx5_esw_sf_max_hpf_functions(dev, &max_sfs, &sf_base_id);
+       if (vport_num != MLX5_VPORT_HOST_PF &&
+           !mlx5_esw_is_spf_vport(esw, vport_num))
+               return 0;
+
+       if (vport_num == MLX5_VPORT_HOST_PF) {
+               err = mlx5_esw_sf_max_hpf_functions(dev, &max_sfs,
+                                                   &sf_base_id);
+       } else {
+               int spf_idx = mlx5_esw_spf_vport_to_idx(esw, vport_num);
+
+               err = mlx5_esw_sf_max_spf_functions(dev, spf_idx, &max_sfs,
+                                                   &sf_base_id);
+       }
+
        if (err)
                return err;
 
@@ -232,14 +246,11 @@ int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, struct mlx
        if (err)
                goto rate_err;
 
-       if (vport_num == MLX5_VPORT_HOST_PF) {
-               err = mlx5_esw_devlink_port_res_register(esw,
-                                                        &dl_port->dl_port);
-               if (err)
-                       mlx5_core_dbg(dev,
-                                     "Failed to register port resources: %d\n",
-                                      err);
-       }
+       err = mlx5_esw_devlink_port_res_register(esw, &dl_port->dl_port,
+                                                vport_num);
+       if (err)
+               mlx5_core_dbg(dev, "Failed to register port resources: %d\n",
+                             err);
 
        return 0;